MVVM バインディングで使用している KendoUI グリッドがあります。また、ユーザーがデータを入力して [追加] ボタンを選択できる UI もあります。追加ボタンを押すと、新しいデータがモデルに追加されます。グリッドは自動同期に設定されています。
私が抱えている問題は、新しいアイテムが追加されると、「[object Object] has no method isNew」というエラーが表示されることです。
私のグリッドは次のとおりです。
$("#objJoinGrid").kendoGrid({
dataSource: {
transport: {
create: function (operation) {
operation.success();
},
update: function (operation) {
operation.success();
},
destroy: function (operation) {
operation.success();
},
read: function (operation) {
operation.success(datasetMetaModel.joinList.ObjectList);
}
},
schema: {
model: {
id: "JOIN_OBJECT_ID",
fields: {
JOIN_OBJECT_ID: { type: "number" },
JOIN_OBJECT_NAME: { type: "string" }
}
}
},
autoSync: true
},
height: 220,
columns: [
{ field: "JOIN_OBJECT_ID", width: "130px" },
{ field: "JOIN_OBJECT_NAME", width: "130px" }
]
});
次に、モデルをグリッドにバインドします。
datasetMetaModel = kendo.observable({
joinList: datasetModel.JoinStructure,
});
kendo.bind($("#areaDiv"), datasetMetaModel);
[追加] ボタンのクリック イベントでは、次のようになります。
$("#addDataset").bind("click", function () {
var dropdownlistPO = $("#objectListing").data("kendoDropDownList");
datasetMetaModel.joinList.ObjectList.push({
JOIN_OBJECT_ID: dropdownlistPO.value(),
JOIN_OBJECT_NAME: dropdownlistPO.text()
});
});
この場合、datasetModel.JoinStructure はサーバーから取得した空の配列です。奇妙なことに、実際にサーバーに 1 つのエントリを追加すると、すべてが機能し、問題なく新しいアイテムを追加できます。何か案は?新しいアイテムを追加する方法に関係があると思います。