更改源时,不会刷新dataSource中的数据

时间:2014-01-11 16:42:45

标签: javascript jquery ajax kendo-ui

我在KendoUI中有与click事件相关的dataSource。我的意思是 - 在将元素的点击ID传递给函数之后,基于id - 为dataSource选择正确的URL。

问题:

我检查并且url正确传递,一切正常,但每个用户的数据都没有改变。因此,例如,如果我点击id为1的用户,我会得到1.json,但是当我点击id为2的用户时,我也会从1.json获取数据。

当我第一次点击id为2的用户时,我得到2.json,点击id为1的用户后,我得到2.json数据。

我如何刷新这些数据?

修改

我忘了添加,函数getData在kendo.observable对象中。我认为可能没有必要说出来,我想尽可能地保持它,但是......好吧,显然它并不那么简单。实际代码:

var myModel = kendo.observable({
     getData: function(myDiv,id) {
        mySource.transport.options.read.url = id + '.json';
        mySource.fetch(function(){
            var data = this.data();
            var tree = $('<ul></ul>');    
            $.each(data, function(i,object) {
                $('<li>').html('<a href="">'+object.task_name+'</a>').appendTo(tree);
            });       
            tree.appendTo(myDiv);
        });
    }
};

getData()绑定以点击div事件(移动应用)。

3 个答案:

答案 0 :(得分:0)

也许你每次都清除myDiv?否则你只是追加到最后而不是清除之前的回复,所以当它得到正确的回应你却没有看到它?

答案 1 :(得分:0)

如果你说url被正确传递,回调中的this引用可能不会返回预期的内容。如果是这种情况,这将解决它:

function getData(myDiv,id) {
    mySource.transport.options.read.url = id + '.json';
    var me = this;    //Check this
    mySource.fetch(function(){
        var data = me.data();   //And this
        var tree = $('<ul></ul>');    
        $.each(data, function(i,object) {
            $('<li>').html('<a href="">'+object.task_name+'</a>').appendTo(tree);
        });       
        tree.appendTo(myDiv);
    });
}

希望这会有所帮助。干杯

答案 2 :(得分:0)

显然获取数据会记住上次响应(?),因此适合我的解决方案是:

var myModel = kendo.observable({
     getData: function(myDiv,id) {
        mySource.transport.options.read.url = id + '.json';
        mySource.read();
        mySource.one('change',function(){
            var data = this.data();
            var tree = $('<ul></ul>');    
            $.each(data, function(i,object) {
                $('<li>').html('<a href="">'+object.task_name+'</a>').appendTo(tree);
            });       
            tree.appendTo(myDiv);
        });
    }
};

是的,这是mySource.one,而不是'on'。