2012-07-02 11 views
14

में $ इंडेक्स का उपयोग करते समय नॉकआउट अभिव्यक्ति का मूल्यांकन नहीं कर रहा है, यह क्यों है कि जब मैं $ इंडेक्स का उपयोग करके कुछ पाठ को बांधने के लिए knockout.js का उपयोग करने का प्रयास करता हूं, तो मुझे किसी संख्या के बजाय फ़ंक्शन का कोड मिलता है?एक बाध्यकारी

<tbody data-bind="foreach: MyList"> 
    <tr> 
    <td><span data-bind="text: $index + 1"></span></td> 
    </tr> 
</tbody> 
इसके बजाय होने का

1, 2, 3 आदि, मैं इस मिल:

enter image description here

आप देख सकते हैं ऊपर छवि में अंतिम वर्ण से, कि शून्य की मेरी सूचकांक है 1 में जोड़ा जा रहा है। यदि मैं अपने बाध्यकारी से '+ 1' को हटा देता हूं, तो मुझे फ़ंक्शन के बजाय 0, 1, 2 मिलता है।

अभिव्यक्ति का मूल्यांकन करने के लिए मैं नॉकआउट कैसे कहूं? जब मैं फॉर्म जमा करता हूं तो मेरे पास एक ही समस्या है। मेरे स्ट्रिंग फ़ील्ड्स को मूल्य के बजाय फ़ंक्शन के रूप में सबमिट किया जा रहा है।

उत्तर

31

$ अनुक्रमणिका एक अवलोकन योग्य है, जो एक कार्य है। प्रयास करें <span data-bind="text: $index() + 1"></span>

+0

यह तय किया गया। दस्तावेज़ों में माता-पिता के साथ उदाहरण क्यों नहीं हैं? http://knockoutjs.com/documentation/binding-context.html – rboarman

+1

अभिव्यक्तियों में अवलोकनों का उपयोग करते समय यह एक सामान्य समस्या है। यदि आप स्वयं द्वारा देखे जाने योग्य उपयोग कर रहे हैं तो बाइंडिंग अकेले देखने योग्य स्वीकार करेगी, लेकिन जब आप अभिव्यक्तियों में अवलोकनों को शामिल करना शुरू करते हैं तो आपको वास्तविक मान तक पहुंचने के लिए() फॉर्म का उपयोग करना होगा। 'अवलोकन' लिखने और लिखने के लिए http://knockoutjs.com/documentation/observables.html देखें। –

+0

मदद के लिए धन्यवाद! – rboarman

4

आप

<span data-bind="text: $index() + 1"></span> 

का उपयोग करें और उदाहरण के लिए अपने सूचकांक मान 2 है, तो अपने अवधि का टेक्स्ट होगा: 21 और नहीं 3.

आप अपने ViewModel में एक समारोह परिभाषित करना चाहिए , इस तरह:

self.itemNumber = function(index) { 
    return index + 1; 
} 

और फिर अपने समय में आपको क्या करना चाहिए:

<span data-bind="text: $root.itemNumber($index())"></span> 

मुझे आशा है कि इससे मदद मिलेगी :)

+0

+1 साधारण तथ्य के लिए कि यदि सूचकांक 2 है, तो स्वीकृत उत्तर तकनीक का उपयोग करके आपको 3, 4 ईसीसी के बजाय 21, 23 या तो मिलता है। मुझे समझ में नहीं आता कि स्वीकृति उत्तर कैसे स्वीकार किया गया था, यह गलत है (कम से कम 2.2.1 नॉकआउट के साथ)। – firepol

+0

यहां एक jsFiddle है ... ऐसा लगता है कि यह दोनों विधियों के साथ काम करता है: एस http://jsfiddle.net/BAEsx/24/ – Donatella