挖空映射插件[创建,更新]:对象已创建,无法更新
Knockout mapping plugin [create, update]: objects created, cannot update
我在这里发布了我的代码:http://jsfiddle.net/HYDU6/6/这是我实际使用的精简版本,但抓住了我问题的本质。我的视图模型是这样的:
var viewModel = {
objects: {
foo: [
{ text: "Foo's initial" },
],
bar: [
{ text: "Bar's initial" },
]
}
}
我正在使用 ko.mapping 插件和我的 create
处理程序来objects
实例化objects.foo
Obj
,然后objects.bar
,返回数组中生成的两个项目。这部分工作正常;我使用
var view = {};
ko.mapping.fromJS(viewModel, mapping, view);
我的问题是根据新数据进行更新。(即,从服务器获取数据(。我有一个新数据的对象,我尝试
ko.mapping.fromJS(new_model, mapping, view);
我怀疑这是不正确的,但尽管进行了广泛的搜索,我还是无法让它工作。(相信我,已经好几天了。
编辑:所以我基本上已经弄清楚了 - 我过于依赖mapping.fromJS,并且某些东西没有被包装到可观察量中。我也意识到我不需要 create((,只需要 update((,因为它无论如何都是在 create(( 之后调用的。如果您有类似的问题,请告诉我!
John,
使用 ko.mapping 更新数据时,请确保不要创建新项目。 您的 UI 已绑定到现有项,因此您只想更新现有项属性的值;不创建新的。 对于您发布的示例,您需要调整地图的"update"方法,以将新值插入到正确的 ko.observable 属性中,而不是在其位置创建新对象。 ko.mapping "update" 方法根据使用情况有几个不同的参数列表,第三个参数是映射的目标对象。 您可能希望更新该对象的属性。
obj.target[label].items[0].text(obj.data[label][0].text);
但是,这有点混乱。 您可能希望创建第二级映射(创建/更新(来处理"深层"对象层次结构,就像在小提琴中一样。 例如,一个映射用于"foo/bar"级别的对象,另一个从"update"中调用ko.fromJS,另一个映射用于子Obj((对象。
修复此问题后,您会遇到几个简单的绑定错误,您可以使用另一个"with"绑定或子数组的"foreach"绑定来修复这些错误。
总的来说,你刚刚遇到了几个常见的陷阱,但没有什么太严重。 您可以在我的博客上了解有关其中一些陷阱的更多信息 这里 : http://ryanrahlf.com/getting-started-with-knockout-js-3-things-to-know-on-day-one/
我希望这有帮助!
- 如何为动态创建的文本区域中输入的值更新ng模型
- Knockout映射创建/更新出现问题
- 创建新对象时,为什么要更新旧对象
- 如何创建对表单的自我更新响应
- 在文本输入区域中创建双向更新
- 基本D3.js:创建或更新元素
- 如何创建独立于数组更新的组件列表
- 确定是创建新对象还是更新现有对象
- 更新脚本以针对具有递增 ID 的新创建的表行运行
- 创建使用 ajax 更新 iframe 的链接
- 通过两种方法创建和更新 CSS
- Sequelize多对多-如何创建新记录并更新联接表
- 检查文档是否已经存在,如果是则更新,否则创建新的Mongoose
- 如果正在创建或更新项目,请在模型“validate”内部进行区分
- 如何使用AJAX创建/更新单选按钮
- 在分析中创建或更新对象
- Mongoose创建一个文档,如果找不到指定的字段,则更新文档中的数组
- 如何为剑道网格创建、更新和删除IList中的数据
- 如何创建每秒更新真实数据的Hight Charts图表
- 动态更新/创建对象属性