私はknockoutjsとマッピングプラグインを使用して、サーバーコールから返されたJSONからビューモデルを生成しています。私はサーバーから配列を取得し、プロパティとしてマップされた配列を持つモデルを作成し、次にデータを画面にすべてのデータをレンダリングするためにテンプレートに配列をバインドします。どちらが素晴らしいですか?ajax呼び出しから返されたJSONから生成されたKnockoutマップされた配列のメンバーを削除するには?
this video(約14:20を参照してください)の例のように、各項目の横にボタンを表示して削除することができます。
しかし、ビデオでは、彼は配列の要素で定義された関数にバインドします。私の要素は、マッピングプラグインを使用してJSONから生成されるので、各要素にどのように関数を追加するのか、あるいはそれをやりたいと思っていてもわかりません。または、ボタンのクリックをビューモデル上の関数にバインドさせ、そのボタンが関連付けられている要素のIDを渡すことはできますか?
私のjavascript:
<script type="text/javascript">
var supplierModel;
$(function(){
getAllSuppliers();
})
function getAllSuppliers(){
$.getJSON('/SWM60Assignment/allsuppliers',function(responseData){
supplierModel = new SupplierModel(responseData);
ko.applyBindings(supplierModel);
});
}
var SupplierModel = function (supplierList) {
var self = this;
self.suppliers = ko.mapping.fromJS(supplierList);
self.remove = function(supplierId){
// how can I get the buttons to call this method with the id
// of the element they are the button for?
alert('remove called with supplier id:'+supplierId);
}
};
</script>
、これはテンプレートです:
<script id="supplierTemplate" type="text/html">
<li>
Name: <span data-bind="text:name"></span> Address: <span data-bind="text:address"></span>
<button data-bind="click:<what can I put here to bind correctly>>">Remove supplier</button>
</li>
</script>
および完全性についてHTML:
<ul class="vertical" data-bind="template:{name:'supplierTemplate',foreach:suppliers}"></ul>
ありがとう!私はそれが可能でなければならないことを知っていた、ただその構文が何であるか分からなかった。 –
アイテムを削除すると、サプライヤオブジェクトの長さは変更されません。それを行う方法。 – vivek
それはすべきです。この配列の長さをどのようにクエリしていますか? – beauXjames