Javascript Knockoutjs与mapping.fromJS和template
我已经用模型中的每个条目更新了一个表,并在删除和添加到数组时触发了两个事件。hideElement调用jquery“fadeOut”,showElement调用jquery“fadeIn”函数来创建漂亮的淡出/淡入效果Javascript Knockoutjs与mapping.fromJS和template,javascript,jquery,knockout.js,knockout-mapping-plugin,Javascript,Jquery,Knockout.js,Knockout Mapping Plugin,我已经用模型中的每个条目更新了一个表,并在删除和添加到数组时触发了两个事件。hideElement调用jquery“fadeOut”,showElement调用jquery“fadeIn”函数来创建漂亮的淡出/淡入效果 <tbody data-bind='template: { foreach: entries, beforeRemove: hideElement, afterAdd: showElement }'> 问题是,每次在ajax响应中调用ko.ma
<tbody data-bind='template: { foreach: entries,
beforeRemove: hideElement,
afterAdd: showElement }'>
问题是,每次在ajax响应中调用ko.mapping.fromJS(response,self.entries)
时,knockout似乎都在删除/添加条目,即使它们完全相同。因此,showElement/hideElement被调用,并且我的表中的元素“闪烁”,因为它们在每次ajax调用中被删除/添加
假设是这样还是我用错了?您需要使用映射插件中的键选项,以便插件知道哪些项是相同的
您的
条目
集合中的项目是什么样子的?他们是否有一些唯一的标识符,比如id?是的,他们有来自mysql数据库的id。ID是一个主键。你需要使用映射pugin中的key选项,以便插件知道哪些项是相同的ID,因为一个键就像一个符咒一样工作!谢谢是的,我就是这样做的,它是根据你上面的评论工作的。谢谢`fromJS(响应,{key:function(data){return ko.utils.unwrapobbservable(data.id);}},self.entries)`虽然如果您想确保从服务器中提取一个全新的项目列表。。。。确保KO完全删除并重新添加所有项目不是更好吗?(最好不要告诉KO钥匙是什么?)
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);
};
};
...
var mapping = {
items: {
key: function(item) { return item.id; }
}
};
ko.mapping.fromJS(data, mapping, this);