2015-04-14 55 views
1

在下面的代碼中,fetch()和sync()方法沒有任何作用。 我想看看我的localStorage中的數據如何得到更新,並且方法沒有更新它(例如LS字符串在代碼中) 我在哪裏出錯?Kendo UI數據源同步()將不起作用

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. 據我所知,如果您自定義任何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對象,它似乎是您的dataSource的基礎數據,但它沒有定義(至少在您發佈的代碼段中)。我的意思是,如果你按照第1步你甚至不需要從該對象讀取不再。

請讓我知道這是否有用,如果您需要更多。

+0

謝謝。這讓我更好地瞭解我需要如何繼續。 –

+0

@NeilMcLeish但這回答了你的問題,或者你有問題? – DontVoteMeDown

+0

謝謝。它已經部分回答了我的問題,但並未告訴我爲什麼sync()函數實際上並未更新localStorage中的數據。 對於這個特定的項目,我發現使用$ .ajax()調用更有效。在將數據發送回Web服務時需要檢查一些條件,並且Telerik的Kendo MobileUI文檔似乎只顯示高度簡化的示例,我選擇了我所知道的...... –