挖空视图模型,用于表示单个对象
knockout view model to represent a single object
编辑:这里的这个答案似乎提供了解决方案; 因为我是一个懒惰的草皮,并且试图避免在两个地方定义我的模型(一次在服务器上,一次在客户端上),我认为必须有一种方法。通过在链接解决方案中使用自定义绑定,我能够从各种表单元素数据绑定属性创建可观察量,因此基本上它从表单生成模型。因此,它有效地从表单驱动模型定义。我还没有决定这是否是一个坏主意:)
我想知道我做错了什么(或者事实上,如果我做错了什么)。我需要创建一个表单来一次编辑一条记录,它只有一些简单的文本/数字属性:
{ItemCode:ABCD,LotNumber:1234,ID:4885,MeasuredValue1:90}
我决定将ko与映射插件一起使用。我对ko相当陌生。无论如何,我最终得到了这样的视图模型:
var LotModel = function() {
var self = this;
self.Update = function(itemcode,lotnumber) {
var data = { ItemCode: itemcode, LotNumber: lotnumber }
//DoAjax is just a utility function and is working fine.
DoAjax("POST", "LotHistory.aspx/GetLotHistory", data,
function(msg) {
ko.mapping.fromJS(msg.d, null, self);
ko.applyBindings(self);
},
function(xhr, ajaxOptions, thrownError) {
AjaxFailure(xhr, ajaxOptions, thrownError);
}
);
}
}
后来在我的代码上,
var lm = new LotModel();
最后在 $(文档).ready
ko.applyBindings(lm);
现在它可以工作了,除了如果你在视图模型中看到,每次我加载数据时,我都必须在虚拟机的更新函数中重新调用 ko.applyBindings(self)。如果我注释掉那行,它不会绑定。我认为这是因为我只绑定了一个对象(即视图模型本身是 ko 映射插件完成工作后的对象),但到处我读到关于 ko 的信息似乎都在说"你只需要调用一次,永远。所以我不禁觉得我错过了一些非常明显的东西;在文档就绪函数中注释掉 ko.applyBindings(lm) 没有任何区别,因为我在 document.ready 中自动调用 lm.Update,但在视图模型中注释掉它会破坏它。
所以我的问题是 - 我这样做的方式是错误的吗?一次只使用单个对象类型绑定是否矫枉过正?我的意思是它不会太困扰我,它按照我想要的方式工作,但它仍然在唠叨我......
如果可以避免,最好不要多次重新应用绑定。问题是您的视图模型中没有任何可观察的属性。对ko.mapping.fromJS
的初始调用可以解决此问题(或者您可以手动添加可观察量),例如:
ko.mapping.fromJS({
ItemCode: '', LotNumber: 0, ID: 0, MeasuredValue1: 0
}, null, self);
参见小提琴的工作示例:http://jsfiddle.net/antishok/qpwqH/1/
- React中的数据集表示
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- 是否可以禁用jquery中的单个单选按钮
- 引导程序:在导航栏中,显示悬停在单个位置的基于Li Link的不同内容
- 使用jquery选中/取消选中单个复选框
- 单个页面上有多个标记表单
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- 用于多个类事件Jquery的单个函数
- 仅使用文件对象选择单个文件
- 如何使用单个表单填写多个表单
- 如何将html打包到单个应用程序中
- 更改图层中单个矢量特征的图标
- 在ES6中,模块将导致多个网络调用,因为两个模块不能在单个文件中定义
- 任何将(SSH)终端嵌入到一些HTML5表示系统中的想法(例如,show.js)
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- Regex表示10位数字,其中没有't允许所有零、所有单个no和序列号
- 如何旋转Javascript中表示为单个数组的4x8网格
- 如何将可为null的json对象表示为单个字符串
- 挖空视图模型,用于表示单个对象