2011-10-20 7 views
66

KnockoutJS tutorials में मैंने निम्नलिखित कोड उदाहरण पर ठोकर खाई जिसमें एक अस्पष्ट चर $data शामिल है।

देखें (एचटीएमएल):

<!-- Folders --> 
<ul class="folders" data-bind="template: { name: 'folderTemplate', foreach: folders }"></ul> 
<script type="text/html" id="folderTemplate"> 
    <li data-bind="css: { selected: $data == mailViewModel.selectedFolder() }, 
        click: function() { mailViewModel.selectFolder($data) }"> 
     ${$data} 
    </li>  
</script> 

देखें मॉडल (जावास्क्रिप्ट):

var viewModel = { 
    // Data 
    folders: ['Inbox', 'Archive', 'Sent', 'Spam'], 
    selectedFolder: ko.observable('Inbox'), 

    // Behaviours 
    selectFolder: function (folder) { 
     this.selectedFolder(folder); 
    }  
}; 

window.mailViewModel = viewModel; 
ko.applyBindings(viewModel); 

ट्यूटोरियल कोई स्पष्टीकरण शामिल नहीं है क्या कि डॉलर चिह्न के लिए प्रयोग किया जाता है और जहां इस $data आता है से। परिवर्तनीय $data कहीं भी परिभाषित नहीं किया गया है और जब मैं $data से $foobar के सभी तीन उदाहरणों का नाम बदलता हूं, तो उदाहरण अब और काम नहीं करता है।

यहां किस प्रकार का जादू चल रहा है?

+2

ग्रेट सवाल पर एक नज़र डालें बनाया है। मैं इसके साथ संघर्ष कर रहा था। – DavidHyogo

उत्तर

37

$data चर एक अंतर्निहित चर है जो वर्तमान वस्तु को बाध्य करने के लिए उपयोग किया जाता है। उदाहरण में यह viewModel.folders सरणी में तत्वों में से एक है।

+0

आपके संक्षिप्त विवरण के लिए धन्यवाद। तो '$ data' चर केवल तभी मौजूद होता है जब' foreach' का उपयोग किया जाता है? – dokaspar

+1

आप टेम्पलेट घोषणा में डेटा पैरामीटर का उपयोग कर अपना मूल्य भी प्रदान कर सकते हैं। साथ ही, यदि डेटा या फ़ोरैच पैरामीटर मौजूद नहीं है तो यह टेम्पलेट –

+3

के लिए पूरे दृश्य मॉडल पर डिफ़ॉल्ट है क्या कोई अन्य अंतर्निर्मित चर है? – Nowaker

63

$ डेटा Knockout's Binding Contexts का हिस्सा है।

  • $ माता पिता
  • $ माता-पिता
  • $ जड़
  • $ घटक
  • $ डेटा
  • $ सूचकांक (ही उपलब्ध भीतर:

    यहाँ सब बिल्ट-इन वैरिएबल हैं foreach बाइंडिंग्स)

  • $ parentContext
  • $ rawData
  • $ componentTemplateNodes
+0

लिंक के लिए धन्यवाद। मुझे साइट पर नेविगेशन में नहीं मिला। – Aligned

+0

बहुत उपयोगी लिंक और सूची – DavidHyogo

+0

यह बहुत मददगार था! धन्यवाद –

0

मैं यह काम

.selected { 
    color:red; 
} 

<ul class="folders" data-bind="template: { name: 'folderTemplate', foreach: folders }"></ul> 
<script type="text/html" id="folderTemplate"> 
    <li data-bind="css: { selected: $data == mailViewModel.selectedFolder() },text:$data, 
        click: function() { mailViewModel.selectFolder($data) }"> 
    </li>  
</script> 

var viewModel = { 
    // Data 
    folders: ['Inbox', 'Archive', 'Sent', 'Spam'], 
    selectedFolder: ko.observable('Inbox'), 

    // Behaviours 
    selectFolder: function (folder) { 
     this.selectedFolder(folder); 
    }  
}; 

window.mailViewModel = viewModel; 
ko.applyBindings(viewModel); 

कृपया http://jsfiddle.net/bowen31337/48RDd/

+2

इसे काम करना समस्या नहीं थी। एक समाधान ट्यूटोरियल पृष्ठों पर भी उपलब्ध है। – dokaspar

संबंधित मुद्दे