javascript - Kendo UI 数据源sync() 将不起作用

标签 javascript user-interface kendo-ui synchronization

在下面的代码中,fetch() 和sync() 方法没有执行任何操作。 我试图查看 localStorage 中的数据如何更新,并且方法没有更新它(示例 LS 字符串在代码中) 我哪里出错了?

function makeWorkingLS(collDesc, projDesc, Id, Description, ElapsedSeconds, ElapsedTime, WorkItemType){

//Create observable object from params
var activeTaskObject = kendo.observable ({
    client: collDesc,
    project: projDesc,
    taskId: Id,
    description: Description,
    elapsedSeconds: ElapsedSeconds,
    elapsedTime: ElapsedTime,
    comment: WorkItemType 
});
// example string in localStorage:
//{"client":"Morken Mindy","project":"Shazbat creation engine","taskId":183,"description":"Create the Shazbat 100% efficiency engine","elapsedSeconds":296803,"elapsedTime":"82h43m","comment":"Task"}  
// Convert to JSON string for localStorage
var activeTask = JSON.stringify(activeTaskObject);
console.info(activeTask);

//Write to localStorage
window.localStorage.setItem("activeTask",activeTask);

//Set it as the active datasource for updating to webservice
var activeTaskDS = new kendo.data.DataSource({
    transport: {
        read: function(options){
            taskItem = JSON.parse(localStorage["activeTask"]);
        },
        update: {
            url: remUpd, //url var declared earlier in the process
            dataType: "json"
        }
    },
    schema: {
        model: {
            client: "client",
            taskId: "taskId"
        },
        data: function(){
            return taskItem;
        }

    }
});

activeTaskDS.fetch(function(){
    activeTaskDS.data()[0].set("client", "NOBODY");
    activeTaskDS.sync();
    cosole.log("activeTaskDS.data()[0]  :  "+activeTaskDS.data()[0]); //should read 'NOBODY' but reads 'Morken Mindy'
});

}

提前致谢, 尼尔。

最佳答案

我不确定到底是什么问题,但我必须指出一些重要的事情:

  1. 据我所知,当您自定义任何 transport 方法时,您必须将数据传递到 options 对象中的回调中:

    transport: {
        read: function(options){
            taskItem = JSON.parse(localStorage["activeTask"]);
    
            // Tells the widget to handle that collection
            options.success(taskItem); 
        }
    }
    
  2. schema.data 中,您似乎想通过此方法传递数据(如果我错了,请纠正我)。但这个方法并不是为了这个目的。它仅用于告诉小部件要读取哪个字段(在向其传递字符串的情况下)或从响应中读取属性,该属性作为您未使用的参数提供。检查第二个示例 here 。因此,这可能不是将 taskItem 对象读取为数据的正确方法;

  3. 谈到 taskItem 对象,它似乎是您的数据源的基础数据,但它尚未定义(至少在您发布的代码片段上)。我的意思是,如果您按照步骤 1 进行操作,您甚至不需要再读取该对象。

请告诉我这是否有帮助以及您是否需要更多信息。

关于javascript - Kendo UI 数据源sync() 将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29628655/

相关文章:

java - 当选择另一个 Jbutton 时恢复 Jbutton 中的颜色变化

C# .NET 3.5 图形用户界面设计

java - 这个带有向上和向下按钮的数字文本框是什么控件?

javascript - Kendo UI 从其编辑器中的小部件访问详细网格实例

javascript - jQuery Galleria 插件 : Make auto-play?

javascript - 在 JavaScript 中预加载 SVG

javascript - 在 Chrome 中使用 HTML5 和 getUserMedia 录制音频

javascript - 在 JavaScript 中将值插入数组数组

javascript - 从剑道网格内的剑道颜色选择器更新服务器

knockout.js - MVVM 和移动 UI 框架的组合,与 Breeze 一起使用