【发布时间】:2013-01-20 11:20:31
【问题描述】:
我的模型中的每个条目都更新了一个表,并且在删除和添加到数组时触发了两个事件。 hideElement 调用 jquery "fadeOut" 和 showElement 调用 jquery "fadeIn" 函数来创建漂亮的淡出/淡入效果。
<tbody data-bind='template: { foreach: entries,
beforeRemove: hideElement,
afterAdd: showElement }'>
我的模型是这样的:
var Model = function() {
self.entries = ko.mapping.fromJS([]);
this.getData = function() {
$.ajax({
url: "/test",
type: "GET",
success: function(response) {
ko.mapping.fromJS(response, self.entries);
...
this.showElement = function(elem) {
if(elem.nodeName == "TR") {
$(elem).fadeIn(500);
}
};
this.hideElement = function(elem) {
if(elem.nodeName == "TR") {
$(elem).fadeOut(500);
};
};
...
问题在于,每次在 ajax 响应中调用 ko.mapping.fromJS(response, self.entries) 时,即使条目完全相同,敲除似乎也在删除/添加条目。因此,调用了 showElement/hideElement 并且我的表中的元素正在“闪烁”,因为它们在每个 ajax 调用中都会被删除/添加。
应该是这样还是我用错了?
【问题讨论】:
-
您的
entries收藏中的项目是什么样的?它们是否有一些唯一标识符,例如 id? -
是的,他们有来自 mysql 数据库的 id。 ID 是主键。
-
你需要在mapping pugin中使用key选项,让插件知道哪些项目是相同的
-
将 ID 添加为密钥就像一个魅力!谢谢!
标签: javascript jquery knockout.js knockout-mapping-plugin