Javascript 在knockout.js中,是否可以使用动态绑定值?

Javascript 在knockout.js中,是否可以使用动态绑定值?,javascript,knockout.js,knockout-2.0,Javascript,Knockout.js,Knockout 2.0,在knockout.js中,是否可以让绑定的右侧(绑定的值)是动态的?比如说, <input data-bind="value: dynamicBinding()"/> <script type="text/javascript"> var vm = { dynamicBinding : function() { return "foo().bar"; }, foo : ko.observable({ bar : ko.obs

在knockout.js中,是否可以让绑定的右侧(绑定的值)是动态的?比如说,

<input data-bind="value: dynamicBinding()"/>
<script type="text/javascript">
var vm = {
   dynamicBinding : function() {
       return "foo().bar";
   },
   foo : ko.observable({
       bar : ko.observable("hi");
   }
};
ko.applyBindings(vm);
</script>
从示例中可以看到,列定义知道如何从数据中提取值。表标记本身或多或少是一个占位符。但据我所知,这不起作用,因为敲除处理绑定的方式。还有其他选择吗

谢谢



解决方案:我最终使用了Ilya的建议-我可以让cellValueBinding成为一个函数,它接受行和列作为参数,并返回一个可观察值。这项技术已被演示

使用
ko.computed

看看例子

编辑
在第二个示例中,您可以向函数传递
$parent

<td data-bind="text: cellValueBinding($parent)"></td>  

谢谢,但在我的第二个示例中,我看不出它是如何工作的。我需要绑定在列定义中。要使计算程序正常工作,它必须是上下文敏感的。具体来说,它必须能够访问“$parent”上下文变量。这实际上可能有效。我在你的小提琴上展开了我所期望的,它不适用于真实的可观察对象(以及双向绑定,如值),但它似乎还可以:。明天我将在我的真实代码中测试这一点。谢谢。如果你真的想动态地执行它,你必须使用
/
eval
来实现。没有什么内置的淘汰赛可以做到这一点。好吧,欢迎选择。)我很确定我可以很容易地用模板(每列定义自己的单元格模板)实现同样的效果,但它感觉有点太重了。你可能对我的表绑定感兴趣:@MichaelBest:谢谢你的提示!看起来您已经用我想要的方法解决了“任意单元格值”的问题——允许dataItem成为函数。
<td data-bind="text: cellValueBinding($parent)"></td>  
{header: "Title", cellValueBinding: function (parent) { return parent.title; }},
{header: "Author", cellValueBinding: function (parent) { return parent.author().name; }}