2013-02-26 98 views
31

आज नॉकआउट में मेरे लिए पहला दिन है। इसके साथ मारा गया। नीचे knockout.js का उपयोग करके मेरा पहला नमूना कोड है और यह एक त्रुटि दिखाता है।मुझे नॉकआउट जेएस के साथ "संपत्ति नहीं पढ़ी जा सकती है" नोड टाइप 'शून्य' त्रुटि क्यों हो रही है?

पढ़ा नहीं जा सकता संपत्ति अशक्त की 'nodeType'

यहाँ मेरी स्क्रिप्ट है: `

function ViewModel() 
    { 
    var self = this; 
    self.n1 = ko.observable(10); 
    self.n2 = ko.observable(10); 
    self.n3 = ko.observable(10); 
    } 
    ko.applyBindings(new ViewModel()); ` 

यहाँ मेरी एचटीएमएल है:

<body> 
<p>Number1:<input data-bind="value:n1"></input></p> 
<p>Number2:<input data-bind="value:n2"></input></p> 
<p>Number3:<input data-bind="value:n3"></input></p> 
</body> 

मैं जानना चाहता हूँ उपरोक्त त्रुटि के कारण और इसे कैसे दूर किया जाए ...

उत्तर

43

यदि आप इस तरह अपना कोड सेट करते हैं, तो यह काम करेगा।

<body> 
<p>Number1:<input data-bind="value:n1"></p> 
<p>Number2:<input data-bind="value:n2"></p> 
<p>Number3:<input data-bind="value:n3"></p> 
<script src="knockout.js"></script> 
<script> 

function ViewModel() { 
    var self = this; 
    self.n1 = ko.observable(10); 
    self.n2 = ko.observable(10); 
    self.n3 = ko.observable(10); 
} 

ko.applyBindings(new ViewModel()); ` 

</script> 
</body> 
+1

यूप अब ठीक काम कर रहा है .. लेकिन क्या मुझे कारण पता है .. ?? –

+11

एचटीएमएल को ऊपर से नीचे तक पार्स किया गया है। इसलिए, यदि आप पृष्ठ के शीर्ष पर स्क्रिप्ट शामिल करते हैं (उदा। ' 'अनुभाग), तो कुछ या सभी पृष्ठ तत्वों के साथ बातचीत करने के लिए तैयार होने से पहले उन्हें चलाया जा सकता है। ऐसा करने के अन्य तरीके हैं (डोम तैयार घटनाओं का जवाब देना), लेकिन नीचे कोड डालना वही है। – FakeRainBrigand

+1

एक अन्य युक्ति: ' 'तत्वों का एक बंद टैग नहीं है। एचटीएमएल में आप उन्हें एक्सएचटीएमएल में '<इनपुट टाइप = "टेक्स्ट">' या '<इनपुट टाइप =" टेक्स्ट "/>' जैसे लिखते हैं। – FakeRainBrigand

32

आप पेज के शीर्ष पर अपने <script> रखना चाहते हैं, तो आप प्रारंभ देरी करने के लिए जब तक पृष्ठ के लोड होते jQuery के लिए तैयार() फ़ंक्शन का उपयोग कर सकते हैं।

$(document).ready(function() { 
    ko.applyBindings(new ViewModel()); 
}); 
+0

मुझे नहीं पता कि यह काम करता है ... वैसे भी आपके मूल्यवान उत्तर के लिए धन्यवाद ... !!! –

+4

हां, यह काम करता है। मेरे पास वही बग था जैसा आपने और इस पृष्ठ ने मुझे $ .ready() के साथ हल करने में मदद की। –

1

मुझे लगता है कि ko.applyBindings (obj); दृश्य मॉडल के तहत लिखना चाहिए।

<!DOCTYPE html> 
<html> 
<head> 
    <title>KO Examples</title> 
    <script type='text/javascript' src='knockout-3.1.0.js'></script> 
    <script type='text/javascript' src='jquery.js'></script> 
    <script type='text/javascript'> 
     var obj = { 
      first_name : 'Gazal Irish' 
     }; 


    </script> 

</head> 
<body> 
<div> 
    <p>My name : <span data-bind="text: first_name"></span> 
<p> 
</div> 
<script type="text/javascript"> 

    ko.applyBindings(obj); 
</script> 

</body> 
</html>