Mic*_*lvR 18 javascript jqtouch knockout-mapping-plugin knockout.js
我们使用knockout和knockout映射插件来促进我们的jQTouch Web应用程序中的数据绑定.我们使用映射插件的原因是能够使用knockout而无需在javascript中手动定义/更改viewmodels.当您从服务器/客户端数据库初始加载数据时,映射插件很有用.
我们遇到的问题是我们有一些屏幕/视图,其中有一种形式可能没有任何初始数据.如果没有这个初始数据,映射插件就无法"生成"viewmodel(ko.mapping.fromJS).这意味着我们仍然需要手动为视图的大部分定义视图模型.
假设这是映射插件(应该)支持的场景,我错了吗?我的意思是,这意味着映射插件仅在您始终具有初始数据加载的情况下可用.
RP *_*yer 19
除了手动管理视图模型之外,还有几个选项.映射插件支持create回调,允许您自定义如何创建它.这可以用于向对象添加默认属性(如果它们恰好丢失).
像这样:http: //jsfiddle.net/rniemeyer/WQGVC/
另一种方法是使用创建缺失属性的绑定.它可能看起来像:
//create an observable if it does not exist and populate it with the input's value
ko.bindingHandlers.valueWithInit = {
init: function(element, valueAccessor, allBindingsAccessor, data) {
var property = valueAccessor(),
value = element.value;
//create the observable, if it doesn't exist
if (!ko.isWriteableObservable(data[property])) {
data[property] = ko.observable();
}
//populate the observable with the element's value (could be optional)
data[property](value);
ko.applyBindingsToNode(element, { value: data[property] });
}
}
Run Code Online (Sandbox Code Playgroud)
你会像这样使用它(需要将属性作为字符串传递,否则会出错):
<input data-bind="valueWithInit: 'name'" />
Run Code Online (Sandbox Code Playgroud)
此处示例:http://jsfiddle.net/rniemeyer/JPYLp/
| 归档时间: |
|
| 查看次数: |
10980 次 |
| 最近记录: |