【发布时间】:2014-11-24 08:00:19
【问题描述】:
我想知道是否有人知道为什么这段代码会被破坏。当我删除返回 productID 的函数时,tbody data-bind with: chosenProduct 可以正常工作,但将函数保留在中会导致 data-bind "value: marketName" 抛出一个错误,指出 "Uncaught ReferenceError: Uncaught ReferenceError: Unable to process binding "value: function (){return marketName }" Message: marketName is not defined "。 这让我觉得由于某种原因chosenProduct 没有被设置为选择时的值。
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 selectedProduct 由“value: selectedProduct”数据绑定设置。当用户从选择框中选择一个项目时,具有所选属性的对象将成为“chosenProduct”。
-
@haim770 扩展我之前的评论:通过使 selectedProduct 充当可观察对象,它允许双向绑定。它可以由用户选择一个选择选项来设置(如我之前的评论中提到的)或由 Javascript 中的函数设置。
-
看我的回答。淘汰赛最好让实际产品对象为
chosenProduct。使用ChosenProductID,您可以读取所选的 ID,如果您查看 writable computed 文档,您可以对其进行调整,以便在使用 ID 编写时,它会查看您的产品列表以将正确的设置为chosenProduct
标签: knockout.js