编程语言
首页 > 编程语言> > javascript-未捕获的ReferenceError:无法解析绑定

javascript-未捕获的ReferenceError:无法解析绑定

作者:互联网

所以这是我想做的

我希望使用剔除功能仅在变量myvalue具有某些内容时才显示

这是我的代码

html

<script type='text/javascript' src="../js/knockout-2.3.0.js" defer="defer"></script>
<script type="text/javascript" src="../js/searchModel.js" defer="defer" ></script>

<h2>Welcome to My World :D</h2>

<div data-bind="visible: myValues().length > 0">
    You will see this message only when 'myValues' has at least one member.
</div>

JS

function helloModel() {
// Editable data
this.viewModel = {
    myValues: ko.observableArray([]) // Initially empty, so message hidden
   };
  //viewModel.myValues.push("some value"); // Now visible
}

我总是得到的错误是:

Uncaught ReferenceError: Unable to parse bindings.
Bindings value: visible: myValues().length > 0
Message: myValues is not defined

最有可能是因为我将属性延迟添加到了脚本标签中,这意味着直到我渲染整个html元素后才会加载文件

但是,这一点很重要,我将在以下三种情况下进行解释:

1-推迟不适用于搜索模型,如下所示
    
    

因此,现在在包含HTML元素之前将包含搜索模型.
但是,这将导致问题,因为它使用knokout代码

Uncaught ReferenceError: ko is not defined

2-推迟搜索模型不知道

<script type='text/javascript' src="../js/knockout-2.3.0.js" defer="defer"></script>
<script type="text/javascript" src="../js/searchModel.js" ></script>

会造成同样的老问题

Uncaught ReferenceError: Unable to parse bindings.
Bindings value: visible: myValues().length > 0
Message: myValues is not defined

3-忘了推迟

<script type='text/javascript' src="../js/knockout-2.3.0.js" ></script>
<script type="text/javascript" src="../js/searchModel.js" ></script>

也会引起跟进问题
    未捕获的TypeError:无法读取null的属性“ nodeType”

因为脚本将在html上加载并尝试在创建元素之前将其绑定

那么,您建议如何解决该问题:)

解决方法:

这应该与您发布的代码一起使用.

<h2>Welcome to My World :D</h2>

<div data-bind="visible: myValues().length > 0">
    You will see this message only when 'myValues' has at least one member.
</div>

<script type='text/javascript'>
  ko.applyBindings((new helloModel()).viewModel)
</script>

我建议将您的viewmodel重构为如下所示

function helloModel() {
    var self = this;
    self.myValues = ko.observableArray([]);
    self.pushHello = function(data,e) {
       self.myValues.push("Hello, world!");
    };
    //self.myValues.push("some value"); // Now visible
}

然后在您的初始化代码中

<script type='text/javascript'>
  ko.applyBindings(new helloModel())
</script>

标签:data-binding,knockout-js,web-applications,html,javascript
来源: https://codeday.me/bug/20191123/2063810.html