Knockout.js 源为空/未定义时模板绑定不工作
有人能解释一下我的视图模型或模板在中的错误吗 它没有按预期工作。基本上,视图模型包含一个对象,该对象为Knockout.js 源为空/未定义时模板绑定不工作,knockout.js,Knockout.js,有人能解释一下我的视图模型或模板在中的错误吗 它没有按预期工作。基本上,视图模型包含一个对象,该对象为null。在视图中,有一个模板绑定到此对象。由于此对象为null,因此不应呈现模板。但是,它确实尝试呈现模板,在我的示例中失败了。如果作业对象为null,则我不希望呈现模板 根据,如果viewmodel包含空对象,并且该对象具有“templatebinding”,则它不会呈现该模板 以下是我的视图模型: var job = function(title) { this.jobTitle
null
。在视图中,有一个模板绑定到此对象。由于此对象为null,因此不应呈现模板。但是,它确实尝试呈现模板,在我的示例中失败了。如果作业对象为null,则我不希望呈现模板
根据,如果viewmodel包含空对象,并且该对象具有“template
binding”,则它不会呈现该模板
以下是我的视图模型:
var job = function(title) {
this.jobTitle = ko.observable(title);
}
var ViewModel = function(first, last) {
this.firstName = ko.observable(first);
this.lastName = ko.observable(last);
//this.job = ko.observable(new job("software developer"));
this.job = ko.observable(null);
this.fullName = ko.computed(function() {
return this.firstName() + " " + this.lastName();
}, this);
};
ko.applyBindings(new ViewModel("FirstName", "LastName"));
这是一种观点:
名字:
姓氏:
你好
工作:
您可以使用div围绕模板绑定,该div使用“if”数据绑定到可观察的作业:
<div data-bind="if: job">
<p data-bind="template: { name: 'editorTmpl', data: job }"></p>
</div>
当作业为null时,编辑器模板隐藏,当作业不为null时,编辑器模板可见
编辑:
更好的解决方案是将“if”选项传递给模板绑定:
<p data-bind="template: { if: job, name: 'editorTmpl', data: job }"></p>
这本书差不多是3年前写的。最新版本的淘汰赛大约是1.2.1
在淘汰赛1.2.1中,您的代码运行良好:
然而,从那时起,击倒已经改变了很多,所以它不再支持这种行为
现在你需要使用装订
演示。虽然你说的是“尝试”,但这是对Ryan的示例和ko 3.0的一种玩弄。它工作得很好:@GôTô不,它工作得不好。。。
li
会在其中呈现一个结果,尽管selectedItem
为空…是的,但至少不会引发错误。你知道为什么一个函数抛出错误而不是另一个吗?这不是因为绑定中使用的属性名:name
(我猜在这个示例中,一个函数被用作bindingcontext,每个函数都有一个name
属性)。如果您使用不同的属性名称,它将抛出一个错误:的确,感谢您花时间指出这一点()
<p data-bind="template: { name: 'editorTmpl', if: job, data: job}"></p>
<div class='liveExample'>
<p>First name: <input data-bind='value: firstName' /></p>
<p>Last name: <input data-bind='value: lastName' /></p>
<!-- ko with: job -->
<p data-bind="template: { name: 'editorTmpl'}"></p>
<!-- /ko -->
<h2>Hello, <span data-bind='text: fullName'> </span>!</h2>
</div>