2012-05-29 4 views
18

मैं knockoutjs का उपयोग कर एक बाध्य सूची/mvc3कैसे का उपयोग कर नाम संपत्ति निर्दिष्ट करने के लिए नॉकआउट js

<div data-bind="foreach: phones"> 
    <input data-bind='value: number' /> 
</div> 

मेरी नियंत्रक कार्रवाई जो है

[HttpPost] 
public ActionResult Index([Deserialize] WizardModel wizard, IStepViewModel step) 
{ 
} 

पहले मैं बाध्य करने के लिए कर रहा था को यह भेजने के लिए मेरी सूची < टी> इनपुट पर नाम निर्दिष्ट द्वारा सर्वर का उपयोग कर के लिए जो होगा

<input name="Phones[0].Name" 
       Phones[1].Number etc.. 

लेकिन अब मैं नॉकआउट का उपयोग कर रहा हूं, मुझे स्पष्ट नहीं है कि यह कैसे काम करना चाहिए। कोई भी मुझे सही दिशा में चलाता है।

टा

उत्तर

50

आप इस attr एक टेम्पलेट या यह मानते हुए अपने फ़ोन नंबर एक नमूदार सरणी में हैं जैसे foreach में बाध्यकारी उपयोग कर सकते हैं।

<input data-bind='attr: { name: "Phones["+$index()+"].Name"}' /> 

मैं यह भी मानता हूं कि आप नॉकआउट के नवीनतम संस्करण का उपयोग कर रहे हैं ताकि आप $ अनुक्रमणिका का उपयोग कर सकें।

यह आपको इनपुट नाम देने की अनुमति देगा ताकि वे एमवीसी मॉडल बाध्यकारी के साथ काम कर सकें।

+0

प्रतिक्रिया के लिए धन्यवाद। यह बहुत अच्छा लग रहा है .. जब मैं इनपुट का निरीक्षण करता हूं जैसा कि आपके पास है .. $ इंडेक्स में कोई बदलाव नहीं। मेरे पास ताजा क्लोन से v2.1.0 है - क्या यह सही संस्करण है? – MikeW

+0

हां इसकी 2.1.0 में। मेरे उत्तर में कुछ टाइपो थे जिन्हें मैंने अभी तय किया था। –

+0

बहुत बढ़िया जोएल, धन्यवाद एक गुच्छा :) – MikeW

0

हो सकता है कि आप एक कस्टम बाध्यकारी कि नाम विशेषता सेट बना सकते हैं। यहाँ देखो: http://knockoutjs.com/documentation/custom-bindings.html

तो फिर तुम लिखने के लिए सक्षम होना चाहिए:

<input data-bind='yourBindingName: Name' /> 
1

आप 'अनन्य नाम' का उपयोग कर सकते हैं, नॉकआउट में निर्माण कर सकते हैं। यहाँ प्रलेखन है: http://knockoutjs.com/documentation/uniqueName-binding.html

आप कस्टम बंधन (उदाहरण के विशिष्ट आईडी पीढ़ी के लिए) आप कस्टम बाइंडिंग का उपयोग कर सकते हैं: http://knockoutjs.com/documentation/custom-bindings.html

ये unuqueName और uniqueId के लिए उपयोगी जवाब हैं: Unique ids in knockout.js templates और Knockout JS "uniqueName" binding - Same name to two fields

विशिष्ट आईडी पीढ़ी के लिए मेरे दिया गया है:

ko.bindingHandlers.uniqueId = { 
    init: function (element, valueAccessor) { 
     if (valueAccessor()) { 
      element.id = ko.bindingHandlers.uniqueId.prefix + (++ko.bindingHandlers.uniqueId.counter); 
     } 
    }, 
    counter: 0, 
    prefix: "unique_id_" 
}; 

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

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