我想知道是否有人有任何洞見,爲什麼這個代碼打破。當我刪除返回productID的函數時,tbody data-bind with: chosenProduct
工作正常,但將函數留在導致data-bind "value: marketName"
引發一個錯誤,指出「Uncaught ReferenceError:無法處理綁定」value:function() {return marketName}「消息:marketName未定義」。這讓我覺得由於某種原因,chosenProduct
沒有被設置爲選擇時的值。KnockoutJS:設置選項值打破「與」綁定
的HTML:
<table>
<tr><td><label>Product Name</label></td><td><select id="productSelect" data-bind="options: products, optionsCaption: 'Choose Product',optionsValue: function(i){ return i.productID }, optionsText:'productName', value: chosenProduct, valueUpdate: 'keyup'"></select></td></tr>
<tbody data-bind="with: chosenProduct">
<tr><td><label>Market</label></td><td><input type="text" readonly data-bind="value: marketName"></td></tr>
<tr><td><label>Client</label></td><td><input type="text" readonly data-bind="value: clientName"></td></tr>
</tbody>
</table>
的JavaScript:
this.products = /* ajax call returns array of product objects*/;
chosenProduct = ko.observable();
resetProduct = function() { this.chosenProduct(null);};
產品對象:
{productID: 1, marketName: "Test", clientName: "Client1"}
@ haim770 chosenProduct通過設置「值:chosenProduct」數據綁定。當用戶從選擇框中選擇一個項目時,具有所選屬性的對象將變成「selectedProduct」。 – dmux 2014-09-29 20:28:57
@ haim770展開我以前的評論:通過讓selectedProduct充當可觀察對象,它允許雙向綁定。它可以由用戶選擇一個選擇選項來設置(如我之前的評論中所提到的)或由Javascript中的函數設置。 – dmux 2014-09-29 20:41:19
看到我的答案。淘汰賽最好還是將實際產品對象作爲'selectedProduct'。使用'ChosenProductID'你可以讀取選擇的ID,如果你看看[writable computed](http://knockoutjs.com/documentation/computed-writable.html)文檔,你可以修改它,所以當用ID,它會去看你的產品列表中設置正確的一個到'selectedProduct' – 2014-09-29 20:45:02