2011-10-12 18 views
31

मैं इस तरह दृश्य मॉडल की एक संपत्ति के लिए एक divs सीएसएस वर्ग के लिए बाध्य करना चाहते हैं सीएसएस वर्ग बाध्यकारी:नॉकआउट एक विदित मॉडल संपत्ति

<div id="statusIndicator" data-bind="css: selectedPriority"> 

लेकिन इस परिणाम उत्पन्न करता है:

<div id="statusIndicator" class=" 0 1 2 3"> 

myViewModel = { 
    selectedPriority: ko.observable('High'), 
    Company: ko.observable("Bert"), 
    Rows: ko.observableArray([ 
     new row(), 
     new row(), 
     new row() 
    ]), 
    Tabs: ['High', 'Medium', 'Low'], 

    selectPriority: function (tab) { 
     this.selectedPriority(tab); 
    } 
}; 

तो जब मैं पृष्ठ मैं चाहता हूँ div होने के लिए इस दृश्य मॉडल का उपयोग करता है लोड: यह दृश्य मॉडल है

<div id="statusIndicator" class="High"> 

मैं क्या गलत कर रहा हूं?

+6

जैसा कि मैंने RPNiemeyer के जवाब में बताया गया है यह कर रहे हैं गतिशील वर्ग बाइंडिंग इस प्रकार की तरह लग रहा है अब नॉकआउट 2.2.0 में समर्थित है। मुझे यह समस्या 2.1.x में हो रही थी, और 2.2.0 को अपडेट किया गया, और यह अब काम करता है। –

+2

@ChrisJaynes आपको यह टिप्पणी एक उत्तर देना चाहिए था। टिप्पणी के रूप में इसे नोटिस करने में कुछ समय लगता है। – CoderDennis

+0

@ कोडर डेनिस - जैसा आपने वर्णन किया था वही समस्या थी, इसलिए मैंने नॉकआउट 2.2.0 के बारे में एक जवाब जोड़ा है। – mg1075

उत्तर

43

इस स्थिति के लिए आप कर सकते हैं::

<div data-bind="attr: { 'class': selectedPriority}"> 
http://knockoutjs.com/documentation/css-binding.html

आप कुछ इस तरह नहीं कर सकते

इस विधि का एकमात्र नकारात्मक पक्ष यह है कि यह क्लास को चालू या बंद टॉगल करने के बजाय सीधे कक्षा सेट करेगा, इसलिए यदि आप एकाधिक कक्षाओं का उपयोग कर रहे हैं, तो selectedPriority होगा कक्षाओं की पूरी सूची रखने की आवश्यकता है।

+0

क्या यह अभी भी नॉकआउट 2.0 में ऐसा करने का तरीका है? – GraemeMiller

+4

हां, यह अभी भी 2.0 में समान है। बाध्यकारी का एक उदाहरण है जो क्लास एट्रिब्यूट को बदलने के बजाय कक्षा को चालू और बंद टॉगल करेगा: https://github.com/SteveSanderson/knockout/wiki/Bindings---class। –

+0

धन्यवाद आरपी, यही वह है जो मैं वास्तव में देख रहा था। मैं अटारी बाध्यकारी के बारे में जानता था, लेकिन उम्मीद कर रहा था कि केवल "कक्षा" विशेषता के लिए एक था, और आपके लिंक में से एक इसे जिस तरह से चाहता था उसे संभालता है। इसके अलावा, मैंने एटीआर बाध्यकारी कोशिश की, और यह आईपैड को छोड़कर सब कुछ पर काम किया। मुझे इसके बारे में एक सफारी-विशिष्ट नॉकआउट समस्या मिली (https://github.com/SteveSanderson/knockout/issues/233) और उद्धरण के साथ कामकाज की कोशिश की, लेकिन इसे काम करने में सक्षम नहीं था। स्टीव के कस्टम बाध्यकारी के साथ, हालांकि, यह बहुत अच्छा काम किया! –

6

लग रहा है कि आप अपने मॉडल से सीधे एक वर्ग सेट नहीं कर सकता की तरह:

<div data-bind="css: { high: selectedPriority() == 1, medium: selectedPriority() == 2}"> 
4

@Chris Jaynes द्वारा टिप्पणी में की ओर संकेत किया है, Knockout 2.2.0 सेटिंग वर्ग नामों आसान, के रूप में नॉकआउट लेखक स्टीव सैंडरसन द्वारा एक ब्लॉग पोस्ट में विस्तृत बनाता है।

http://blog.stevensanderson.com/2012/10/29/knockout-2-2-0-released/

पोस्ट के अनुसार:

हम भी कुछ विशेषताओं के कार्य और अधिक की तरह आप हमेशा लगा कि वे काम करना चाहिए हो सकता है बनाया है। उदाहरण के लिए, सीएसएस बाध्यकारी अब तत्वों (पहले, यह पूर्वनिर्धारित सीएसएस वर्ग के नाम टॉगल तक ही सीमित था)

ब्लॉग पोस्ट भी एक jsfiddle आप के लिए साथ खेल सकते हैं शामिल करने के लिए प्रोग्राम के रूप में रूप से जेनरेट CSS वर्ग नाम संलग्न कर सकते हैं कार्रवाई में बाध्यकारी देखें। http://jsfiddle.net/qRmfH/light/

नोट अपने उदाहरण में css बाध्यकारी वाक्य रचना, css: chosenTicketCss है, जो एक computed observable है कि एक सीएसएस वर्ग के नाम देता है:

<p data-bind="visible: chosenTicket, css: chosenTicketCss"> 
    Excellent choice! Suits you perfectly. 
</p> 
+0

बस आधा दिन बिताया कि यह पता लगाने की कोशिश क्यों कर रहा है कि मेरे कोड ने पूरी तरह से प्रलेखन का पालन क्यों नहीं किया। बाहर निकला हम अभी भी 2.1 पर थे और सीएसएस बाध्यकारी 2.1 और 2.2 के बीच बदल गया है। Wtf को समझने के लिए सही दिशा में मुझे अग्रणी करने के लिए धन्यवाद। –

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