当我更改金额时,勾选复选框等,它会触发一些javascript,其中包含一些代码,用于在dataItem上设置另一个字段,因此dataItem.Set ("Amount", 0);
我可以使用dataItem.Amount = 0;
设置它,但我还需要更新单元格的内容。当我设置时,我显然不希望从其他单元格清除脏标志,因为我还没有点击“保存更改”,所以它们仍然“脏”。
我找不到.set方法的任何文档。
任何建议都将受到赞赏。
@(Html.Kendo().Grid<OurViewModel>()
.Name("Grid")
.DataSource(dataSource => dataSource
.Ajax()
.Model(model =>
{
model.Id(a => a.ID);
model.Field(a => a.Reference).Editable(false);
model.Field(a => a.Narrative).Editable(false);
model.Field(a => a.Include).Editable(true);
model.Field(a => a.Amount).Editable(true);
})
.Batch(true)
.Read(read => read.Action("_Read", "Home"))
.Update(update => update.Action("_Update", "Home"))
.ServerOperation(false)
.Events(events =>
{
events.Change("onDataSourceChange");
})
)
.Columns(columns =>
{
columns.Bound(a => a.Reference).Title("Reference");
columns.Bound(a => a.Narrative).Title("Narrative");
columns.Template(@<text></text>).Title("Include?")
.ClientTemplate("<input type='checkbox' #= Include ? checked='checked': '' # onclick='updateAmount(this, \"#= ID#\")' />");
columns.Bound(a => a.Amount).Title("Amount");
})
.Events(events =>
{
events.Save("onSave");
events.SaveChanges("onSaveChanges");
})
.ToolBar(toolbar =>
{
toolbar.Save();
})
.Editable(editable => editable.Mode(GridEditMode.InCell))
)
和JS。
function updateAmount(cb, ourID) {
var checked = $(cb).is(':checked');
var grid = $('#Grid').data().kendoGrid;
var dataItem = grid.dataSource.get(ourID);
dataItem.set("Include", checked);
if (checked) {
dataItem.set("Amount", dataItem.get("OriginalAmount"));
} else {
dataItem.set("Amount", 0);
}
}
答案 0 :(得分:0)
在可观察对象上调用set方法时(注意:dataSource中的每个dataItem在加载时转换为kendo ObservableObject)我们绑定到dataItem的任何小部件都将被更新,在这种情况下,您的网格是绑定的小部件。
如果直接设置值(即dataItem.Amount = 0),则不会触发任何可观察对象的绑定事件,并且网格(或绑定到dataItem的任何其他小部件)将不会更新。在修改可观察对象的字段时,应始终使用set,以使UI保持最新状态。
在dataSource中,dataItem中的各个字段没有脏标志。 dataItem本身将有一个名为“dirty”的字段,只要其字段发生任何变化,该字段就会设置为true。更改多个字段只会为整个dataItem设置dirty = true。您无需担心跟踪已修改的字段。一旦脏了,它将保持脏,直到你保存数据。
当你保存网格内容(a.k.a.同步dataSource)时,任何(和唯一)脏行= true的行都将被发送到服务器。保存后,脏标志将被删除。在这方面,您将希望避免在数据库中使用“脏”作为表属性。
kendo documentation at非常完整,但我强烈建议您通过kendo javascript代码进行跟踪,以便真正了解它。最后一点,我开始使用Kendo MVC方法,希望利用C#知识,但很快就发现在JavaScript中编写所有客户端更容易。每次攻击的服务器都会将所有C#代码转换为相当冗长的JavaScript。这会给服务器带来不必要的负担,并使客户端调试更加困难。