Javascript 具有敲除的高效模型绑定

Javascript 具有敲除的高效模型绑定,javascript,knockout.js,single-page-application,Javascript,Knockout.js,Single Page Application,我有一个具有30个数据绑定属性的模型。我正在寻找KO中模型绑定的最佳实践模式。我知道我能做到: HTML <div>First Name</div> <input type="text" data-bind="value: FirstName, valueUpdate: 'afterkeydown'" /> <div>Last Name</div> <input type="text" data-bind="value: Las

我有一个具有30个数据绑定属性的模型。我正在寻找KO中模型绑定的最佳实践模式。我知道我能做到:

HTML

<div>First Name</div>
<input type="text" data-bind="value: FirstName, valueUpdate: 'afterkeydown'" />
<div>Last Name</div>
<input type="text" data-bind="value: LastName, valueUpdate: 'afterkeydown'" />
<div>Full Name</div>
<input type="text" data-bind="value: FullName" />

是否有一个扩展、模式或最佳实践来处理这种冗长的空检查或其他设置问题?这是一个单页应用程序。如果我以某种方式查看页面,我会绑定到一个模型。如果从另一个角度来看,我根本不绑定任何内容(稍后在AJAX中绑定)。

您只是不想将这些属性中的任何一个设置为null吗?视图将“”视为null,因此仅将其设置为属性就可以了

如果你只是在寻找速记,你可以随时这样做-

self.LastName = ko.observable(model.LastName ? model.LastName : '');
self.LastName = makeObservable(model.LastName);
self.FirstName = makeObservable(model.FirstName);

function makeObservable(prop) {
    return ko.observable(prop ? prop : '');
}
或者,如果您希望重新使用它,您可以这样做-

self.LastName = ko.observable(model.LastName ? model.LastName : '');
self.LastName = makeObservable(model.LastName);
self.FirstName = makeObservable(model.FirstName);

function makeObservable(prop) {
    return ko.observable(prop ? prop : '');
}
最后,您可以始终使用映射插件映射数据,只需覆盖您希望映射的方式


您提供的链接正是我想要的。一个为我负责绑定的扩展(很像ASP.NET MVC模型绑定)
ko.mapping:这会自动为数据上的每个属性创建可观察的属性。
请记住,如果不指定输出的外观,可能最终会丢失属性。例如,model.SSN在一个人身上,但不是在下一个人身上,该属性不会被映射,除非您明确告诉映射插件这是一个人应该是什么样子。