Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Knockoutjs与mapping.fromJS和template_Javascript_Jquery_Knockout.js_Knockout Mapping Plugin - Fatal编程技术网

Javascript Knockoutjs与mapping.fromJS和template

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

我已经用模型中的每个条目更新了一个表,并在删除和添加到数组时触发了两个事件。hideElement调用jquery“fadeOut”,showElement调用jquery“fadeIn”函数来创建漂亮的淡出/淡入效果

<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);