2015-04-14 2 views
1

В приведенном ниже коде методы fetch() и sync() ничего не делают. Я пытаюсь увидеть, как данные в моем localStorage обновляются, а методы не обновляют его (пример строки LS находится в коде) Где я иду не так?Kendo UI datasource sync() не работает

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

Я не уверен, что проблема на самом деле, но я должен отметить некоторые важные вещи:

  1. AFAIK, когда вы настроить любые transport методы, которые вы должны передать данные в обратный вызов в options объект:

    transport: { 
        read: function(options){ 
         taskItem = JSON.parse(localStorage["activeTask"]); 
    
         // Tells the widget to handle that collection 
         options.success(taskItem); 
        } 
    } 
    
  2. schema.data в, кажется, что вы хотите передать данные через этот метод (поправьте меня, если я ошибаюсь). Но этот метод не для этой цели. Он используется только для того, чтобы сообщить виджету, какое поле читать (в случае передачи ему строки) или прочитать свойство из response, которое приходит как параметр, который вы не используете. Проверьте второй пример here. Таким образом, это может быть неправильным способом чтения объекта taskItem в качестве данных;

  3. Говоря о объекте taskItem, кажется, что его базовые данные вашего источника данных, но он не определен (по крайней мере, в опубликованном фрагменте). Я имею в виду, что если вы будете следовать шагу 1, вам больше не понадобится от этого объекта.

Пожалуйста, дайте мне знать, если это поможет, и если вам нужно больше.

+0

Спасибо. Это дало мне лучшее понимание того, как мне нужно продолжать. –

+0

@NeilMcLeish, но это ответили на ваш вопрос или у вас проблемы? – DontVoteMeDown

+0

Спасибо. Он частично ответил на мой вопрос, но не показывает мне, почему функция sync() фактически не обновляет данные в localStorage. Для этого конкретного проекта я нашел гораздо более эффективным использование вызова $ .ajax(). Существует ряд условий, которые необходимо проверить при отправке данных обратно в веб-службу, и, поскольку документация Telerik для Kendo MobileUI, похоже, показывает очень упрощенные примеры, я решил пойти с тем, что знаю ... –

Смежные вопросы