सवाल सशर्त रूप से knockout.js में एक तत्व विशेषता जोड़ें


Knockout.js लाइब्रेरी में एक है "attr" अनिवार्य तथ्य जो आपको एक HTML तत्व विशेषता (उदा। "शीर्षक") के मान को गतिशील रूप से बदलने की अनुमति देता है। हालांकि, कुछ मामलों में, बाध्य वस्तु पर संबंधित अवलोकन के आधार पर विशेषता की आवश्यकता हो सकती है या नहीं भी हो सकती है। उदाहरण के लिए, यदि मेरे मॉडल में "शीर्षक" देखने योग्य है, तो हो सकता है कि मैं "शीर्षक" विशेषता सेट करना चाहूंगा यदि यह मौजूद है (गैर-शून्य) या विशेषता पूरी तरह से छोड़ दें यदि यह मौजूद नहीं है (शून्य)।

क्या नॉकआउट सशर्त रूप से एक विशेषता सेट करने का कोई तरीका प्रदान करता है? (आदर्श रूप से पूरे तत्व खोलने वाले टैग को सशर्त रूप से प्रस्तुत किए बिना ...)

[ध्यान दें] इसी तरह नामित प्रश्न वास्तव में सीएसएस कक्षाओं के नॉकआउट के विशेष संचालन द्वारा हल किया गया था और इस प्रश्न से संबंधित नहीं है (या इसका अपना शीर्षक): कैसे नॉकआउट के साथ सशर्त रूप से एक सीएसएस वर्ग प्रस्तुत करने के लिए


44
2017-10-18 20:16


मूल


मुझे लगता है कि अगर डिफ़ॉल्ट रिटर्न शून्य हो तो डिफ़ॉल्ट व्यवहार है लेकिन मैं गलत हो सकता हूं। क्या मैं आपको पूछ सकता हूं कि खाली मूल्य के मामले में आपको शीर्षक = "" के बजाय विशेषता को स्पष्ट रूप से सेट करने की आवश्यकता क्यों नहीं है? - Bart Calixto


जवाब:


मुझे इसका चयन करते समय इसकी आवश्यकता थी (कि मैं अंतर्निहित नॉकआउट के बजाय मैन्युअल रूप से उत्पन्न कर रहा था)।

<option 
 data-bind="text: text, 
    attr:{
     value:value,
     'selected': typeof(selected) !== 'undefined' ? selected : null 
     }">
 Choice X
</option>

यह हमेशा 'टेक्स्ट' विशेषता को अपडेट करने और 'मान' विशेषता जोड़ने के लिए कहता है, लेकिन डेटा में पहले से ही 'चयनित' का मान है, तो केवल 'चयनित' जोड़ें।


72
2018-05-30 16:22



इसलिए मूल रूप से विशेषता मूल्य के रूप में 'शून्य' डालें और यह विशेषता प्रस्तुत नहीं करेगा, अच्छा! - root
यह मान्य उत्तर होना चाहिए। यह पूरी तरह से सबसे सरल तरीके से सवाल का जवाब देता है। - Laurent S.
मैं मानता हूं कि यह स्वीकार्य उत्तर होना चाहिए। एक कस्टम बाध्यकारी बनाने के दौरान पूरी तरह से काम करेंगे, यह आसान है, और अधिक सीधे पूछे गए सवाल को संबोधित करते हैं। - kiprainey
यदि आपका तर्क सरल है तो बहुत साफ समाधान। ऊपर वोट। - pimbrouwers


आप एक कस्टम बाध्यकारी बना सकते हैं attrIf जो विशेषताओं को जोड़ने या नहीं करने से पहले एक विशिष्ट अवलोकन करने योग्य बूलियन के मान की जांच करेगा। यह उदाहरण देखें:

ko.bindingHandlers.attrIf = {
    update: function (element, valueAccessor, allBindingsAccessor) {
        var h = ko.utils.unwrapObservable(valueAccessor());
        var show = ko.utils.unwrapObservable(h._if);
        if (show) {
            ko.bindingHandlers.attr.update(element, valueAccessor, allBindingsAccessor);
        } else {
            for (var k in h) {
                if (h.hasOwnProperty(k) && k.indexOf("_") !== 0) {
                    $(element).removeAttr(k);
                }
            }
        }
    }
};

<a href="#" data-bind="attrIf: {title: title, _if: flag}">link</a>

29
2017-10-18 21:14



शानदार लेकिन एक गंभीर मुद्दा- यदि मेरे पास 'शीर्षक' के अलावा कोई विशेषता है और मैं नहीं चाहता कि _if इसे लागू करे ... _if अभी भी होगा। फिर भी, कोड-विचार अच्छा है। - Phil
आप हमेशा मानक 'attr' बाध्यकारी (जो _if ध्वज से प्रभावित नहीं है) का उपयोग करके अन्य विशेषता जोड़ सकते हैं। उदाहरण: डेटा-बाइंड = "attrIf: {शीर्षक: शीर्षक, _if: ध्वज}, attr: {otherAttr: val}" - gbs
मैं नीचे दिए गए निष्कासन के आस-पास कुछ और तर्क रखने की अनुशंसा करता हूं ... यदि आप तत्व पर पहले से मौजूद एक विशेषता को सशर्त रूप से ओवरराइड करना चाहते हैं तो यह उत्तर काम नहीं करता है। निम्नलिखित <इनपुट प्रकार = "संख्या" चरण = "01" डेटा-बाइंड = "_ अगर: ध्वज, चरण: 1" /> - MrTristan


नॉकआउट का "एटीआर" डेटा बाध्यकारी इस परिदृश्य का समर्थन करता है बस आपके getDisabledState () फ़ंक्शन से शून्य या अपरिभाषित लौटाता है, तो यह विशेषता को उत्सर्जित नहीं करेगा।

यह जवाब से पुनर्प्राप्त किया गया था 'रीडोनली' और 'अक्षम' जैसे गुणों के साथ नॉकआउट अटैचमेंट बाध्यकारी


8
2017-07-25 18:57





काश मैं सिर्फ @ जीबीएस का जवाब दे सकता था, लेकिन मैं नहीं कर सकता। मेरे समाधान में एक ही एचटीएमएल तत्व होना चाहिए, एक विशेषता के साथ, एक बिना, और तत्व के अनुसार इसे जोड़ने के लिए एक नॉकआउट स्थिति होगी। मैं इस कस्टम बाइडिंग के बारे में भी जानता हूं, लेकिन समाधान का कौन सा अधिक कुशल है?


2
2017-10-25 12:28



और यदि आप एक ही तत्व में 5 अलग-अलग गुण हैं तो आप क्या करते हैं? परिप्रेक्ष्य में बहुत मज़ा ... - Samuel