2013-05-13 62 views
0

我已經把一個jsFiddle放在一起,演示了修改數據項時未更改事件。爲什麼在數據項被修改後,KendoUI DataSource更改事件不會引發?

轉到提琴,你會看到一個網格和網格下的一些鏈接。 按順序點擊每個鏈接,您將看到Modify操作確實發生,但不會引發更改事件。當你點擊刷新網格鏈接時,你可以看到修改的確發生了。但是,對於添加/刪除操作,不需要刷新網格,並且還會引發更改事件。

我怎樣才能當DataItem的修改將提出的更改事件?

問候,

斯科特

http://jsfiddle.net/codeowl/GfPDC/108/

出於某種原因,StackOverflow上是說:

標記 「鏈接jsfiddle.net必須由代碼陪同」:

<div id="KendoGrid"></div> 

<p>&nbsp;</p> 
<ul> 
    <li><a id="lnkWireUpDataSource" class="link">Wire Up DataSource</a><br /></li> 
    <li><a id="lnkAddRecord" class="link">Add Record</a></li> 
    <li><a id="lnkModifyRecord" class="link">Modify Record</a></li> 
    <li><a id="lnkRefreshGrid" class="link">Refresh Grid</a></li> 
    <li><a id="lnkRemoveRecord" class="link">Remove Record</a></li> 
</ul> 

的JavaScript:

var _data = [ 
     { Users_ID: 1, Users_FullName: 'Bob Smith', Users_Role: 'Administrator' }, 
     { Users_ID: 2, Users_FullName: 'Barry Baker', Users_Role: 'Viewer' }, 
     { Users_ID: 3, Users_FullName: 'Bill Cow', Users_Role: 'Editor' }, 
     { Users_ID: 4, Users_FullName: 'Boris Brick', Users_Role: 'Administrator' } 
    ], 
    _dataSource = new kendo.data.DataSource({ data: _data }); 

$('#KendoGrid').kendoGrid({ 
    dataSource: _dataSource, 
    columns: [ 
     { field: "Users_FullName", title: "Full Name" }, 
     { field: "Users_Role", title: "Role", width: "130px" } 
    ] 
}); 

$('#lnkRefreshGrid').click(function() { 
    $("#KendoGrid").data("kendoGrid").refresh(); 
}); 

function dataSourceChange(e,a,b) { 
    var _data = this.data(); 
    console.log('Change Event Raised | Action: '+e.action+' | Data Length: '+_data.length); 
} 

function dataSource_error(e) { 
    console.log('Error Event Raised: '+e.status); 
} 

$('#lnkWireUpDataSource').click(function() { 
    _dataSource.bind('change', dataSourceChange); 
    _dataSource.bind('error', dataSource_error); 
    _dataSource.fetch(); 
}); 

$('#lnkAddRecord').click(function() { 
    _dataSource.add({ Users_ID: 5, Users_FullName: 'Bert Bird', Users_Role: 'Viewer' }); 
}); 
$('#lnkModifyRecord').click(function() { 
    var _dataItem = _dataSource.at(_dataSource.data().length - 1); 
    _dataItem['Users_Role'] = 'Administrator'; 
}); 
$('#lnkRemoveRecord').click(function() { 
    var _dataItem = _dataSource.at(_dataSource.data().length - 1); 
    _dataSource.remove(_dataItem); 
}); 

回答

2

,因爲要更新array而不是ObservableObject它不提高。當您使用:

_dataItem['Users_Role'] = 'Administrator'; 

你要做的是更新JavaScript對象的屬性。 JavaScript中沒有攔截/知道該對象已被修改的方法。

嘗試:

_dataItem.set('Users_Role', 'Administrator'); 

代替,然後劍道UI set檢查要更新的對象,並引發events加上所有其他必要的行動。

見例如修改here

+0

輝煌!感謝OnaBai,花時間回答我的問題。非常感激。 – user2109254 2013-05-13 23:57:27

相關問題