将值分配给由字符串名称动态确定的淘汰赛 observable
Posted
技术标签:
【中文标题】将值分配给由字符串名称动态确定的淘汰赛 observable【英文标题】:Assigning values to knockout observable dynamically determined by string name 【发布时间】:2012-02-12 20:56:13 【问题描述】:我有两个问题:
我正在使用淘汰赛(我是一个 KO 菜鸟),我想为点击事件可观察到的特定淘汰赛分配一个值,但该值应仅由点击事件本身确定(以及我的值将传递给 data-bind=click)...可以完成吗...我可以仅根据其名称(字符串值)获取淘汰赛 observable 变量,而不必知道我将要成为哪个 observable事先赋值?
其次,不那么重要的是,如果存在这样的函数 ko.ObservableByName(stringName) 是否可以以某种方式使用它并在页面加载时分配多个选择项的预选......请问如何?
我试过这样做...我用过 data-bind="click: loadData.bind($data, 'param1', 'param2 ')" 然后我可以通过在我的淘汰视图模型中构造一个事件处理程序来获取那些 param1 和 param2 字符串值类似的东西:
self.loadData = function (src, dest)
//dest is 'param1', src is 'param2', both are stings
if (src == 'param1')
self.p1observable($('#' + dest).val());
else
self.p2observable($('#' + dest).val());
我最大的问题是我必须使用已经指定并在其中硬编码的 p1/p2 可观察对象来构造函数,但实际上我希望将 param1 和 param2 用作名称或按名称引用我的一些可观察值,然后我可以随意传递(除了要分配的值,或者更好的另一个可观察值,我想将值从第一个复制到第一个),因此我可以分配传入的值在 click 函数中直接调用我选择的 observable(并且没有大量这样的小函数)...
也许我走错路了?也许我根本不应该传入字符串值......也许我应该尝试传入一个可观察对象,但是如何在数据绑定中做到这一点,你只是写 myViewModel.myObservable 或类似的东西吗?
【问题讨论】:
你能举一个例子来说明你目前的情况吗? 【参考方案1】:如果您有父对象,那么您可以使用以下语法访问可观察对象:
viewModel[observableName]
并设置如下值:
viewModel[observableName](newValue)
这是一个示例,您可以从下拉列表中选择属性名称,然后相应地设置值,另一个示例是按钮直接绑定到设置可观察值/值:http://jsfiddle.net/rniemeyer/CTnUQ/
【讨论】:
这几乎正是我所需要的,所以非常感谢...只是一个旁注,如果在 viewModel 中,请使用 this[observableName] 表示法...但我猜如果你'正在从 viewModel 构造之外使用它,我不确定如果例如我有许多不同的页面并且每个页面都将加载外部 viewModel 脚本,这是否会起作用,那么许多页面是否会使用相同的数据实例还是每个都制作自己的从外部 .js 文件加载的 viewModel 副本? 我会尽快尝试,我被 JQMobile 卡住了,它在 WP7 上无法解决的 changePage 错误以上是关于将值分配给由字符串名称动态确定的淘汰赛 observable的主要内容,如果未能解决你的问题,请参考以下文章