我有一个淘汰码:
功能任务(数据){
this.title=ko.可观察(data.title);
this.isDone=ko.可观测(data.isDone);
}
函数TaskListViewModel(){
//资料
var self=这个;
self.tasks=ko.observearray([]);
self.newTaskText=ko.observable();
self.incompleteTasks=ko.computed(函数(){
return ko.utils.arrayFilter(self.tasks(),function(task){return!task.isDone()});
});
//操作
self.addTask=函数(){
push(新任务({title:this.newTaskText()}));
self.newTaskText(“”);
};
self.removeTask=函数(任务){self.tasks.remove(任务)};
}
应用绑定(新的TaskListViewModel());
此html:
<;头>;
<;script type=“text/javascript”src=”https://stackoverflow.com/questions/9128015/jquery-1.7.1.min.js“></脚本>;
<;script type=“text/javascript”src=”https://stackoverflow.com/questions/9128015/knockout-2.0.0.js“></脚本>;
<;script type=“text/javascript”src=”https://stackoverflow.com/questions/9128015/script.js“></脚本>;
</头>;
<;车身>;
<;h3>;任务</h3>;
<;表单数据绑定=“提交:添加任务”>;
添加任务:<;输入数据bind=“value:newTaskText”placeholder=“需要做什么?”/>;
<;按钮类型=“提交”>;添加</按钮>;
</表格>;
<;ul data bind=“foreach:tasks,visible:tasks()。长度>;0”>;
<;李>;
<;输入type=“checkbox”数据绑定=“checked:isDone”/gt;
<;输入数据绑定=“值:标题,禁用:isDone”/>;
<;a href=“”数据绑定=“单击:$parent.removeTask”>;删除</a>;
</李>;
</ul>;
你有<;b data bind=“text:uncompleteTasks().length”>&;nbsp</b>;未完成的任务
<;span data bind=“可见:未完成任务()。长度==0”>;-啤酒时间到了</span>;
</车身>;
该示例与Knockout网站上的示例相同,但当我运行它时,它会在Chrome Fire Bug上返回以下消息:
未捕获的TypeError:无法读取null的属性“nodeType”
这一个与敲除文件和我的脚本的这一行相关:
ko.applyBindings(新的TaskListViewModel());
这个错误在敲除时指向这一行(1766):
var isElement=(nodeVerified.nodeType==1);
我做错了什么
发生此问题的原因是我试图在创建HTML元素之前绑定它
我的脚本加载在HTML(头部)的顶部,但它需要加载在HTML代码的底部(就在结束正文标记之前)
谢谢你的关注,詹姆斯·阿勒迪斯
一种可能的解决方法是使用defer=“defer”
<;脚本src=”https://stackoverflow.com/questions/9128015/script.js“type=“text/javascript”defer=“defer”></脚本>;
如果脚本不生成任何文档内容,请使用此选项。这将告诉浏览器在加载脚本之前可以等待加载内容
进一步阅读
希望能有帮助