2013-05-03 72 views
4

我試圖寫Jaydata一個簡單的CRUD功能的操作,我寫了更新操作這個簡單的代碼:更新和刪除Jaydata

SampleClass.prototype.Load = function(input1,callback) 
{ 
    var param='it.Name=="'+input1+'"'; 
    this.data.items.filter(param).forEach(function(ii) 
    { 
     callback(ii); 
    }); 
    this.data.items.saveChanges(); 
}; 

所以當我打電話:

t.Load('Entry4',function(res){console.log(res.Name)}) 

它就像一個魅力!但如果我呼叫更新操作回撥如:

t.Load('Entry4',function(res){res.Name="Entry5"}) 

它不會更改數據庫中的任何內容。我已經看到類似http://jaydata.org/examples/JayDataPro/ToDoList_complex的beginTransaction函數,但我無法理解它的本質。

回答

3

特別感謝的Gabor DOLLA

爲了在JayData更新值:

  • DB必須有裏面一個主鍵
  • 更改非密鑰屬性
  • 後面調用異步save()函數。

解決的問題是: 改變對象字段的定義是這樣後:

Name{ type:'string', **key:true**} 

您可以在任何查詢而只是改變他們

t.Load('Entry4',function(res){res.LastName="Entry5";res.save()}); 
1

我認爲在修改實體之前,只有附件()丟失。

this.data.items.attach(res); 

順便說一句,我會將saveChanges移動到更新回調,因爲你不需要在只讀場景。

+0

的非關鍵屬性請澄清:你不能使用這個和res,他們沒有一起定義。 我用t.data.items.attach(res);在更改結果之前和之後,我也嘗試創建一個臨時變量並附加它。沒有用。 – AutomaticHourglass 2013-05-03 06:33:44

+2

嗨! '這'是一件棘手的事情,你並不需要它,所以你最好避免它。正如羅伯茲告訴你的那樣,在開始改變屬性之前,你需要連接,以便JayData可以跟蹤這些變化。另一種解決方案是使用我們的其他api,因此將第二個回調函數更改爲: t.Load('Entry4',function(res){res.Name =「Entry5」; res.save();}) – 2013-05-03 07:08:30