我无法弄清楚如何获取绑定项的属性。当.name()存在时,以下内容不起作用。
<span data-bind='text: selectedMenuSection().name()'></span>
似乎无法访问data-bind中绑定对象的属性。相同的语法适用于模型函数MenuViewModel.showSelection()。我已经尝试了所有可想到的语法但没有成功。以下是我的代码的摘录。
HTML
MenuSections: <select data-bind="options: leftMenu, optionsText: 'name', value: selectedMenuSection, optionsCaption: 'Pick...'"> </select>
Selected: <span data-bind='text: selectedMenuSection().name()'></span>
<button data-bind="click: showSelection">Show Selected Info</button>
的javascript
function MenuViewModel (menu) {
var self = this;
self.leftMenu = ko.observableArray(menu);
//Bound to Select
self.selectedMenuSection = ko.observable();
self.showSelection = function(){
alert(self.selectedMenuSection().name());
};
};
是否无法获取数据绑定对象属性或者我还没弄明白该怎么做?
答案 0 :(得分:0)
您可以尝试以下方法:
<span data-bind="with: selectedMenuSection">
<span data-bind="text: name"></span>
</span>
第一行确保仅在selectedMenuSection不为null或未定义时才存在内部跨度(当您创建self.selectedMenuSection时,其值未定义,这可能会在尝试访问name属性时导致错误)。第二行是您的原始绑定。最后你不需要()
,因为你绑定了observable(你只需要()
来访问observable的当前值,或者如果你绑定一个复杂的语句而不是直接绑定一个可观察的。)
答案 1 :(得分:0)
MenuSection是什么样的?我假设它有一个不是可观察的名称属性。汉斯的答案是解决问题的正确方法。理解javascript对象并了解在编写敲除时你所处的“上下文”html非常重要。
with binding将上下文从根元素(传递给ko.applyBindings的对象)更改为selectedMenuSection的上下文。因此,在'with'你的上下文(在所有情况下为$ data)中都是一个MenuSection。如果你对上下文中的对象感到好奇,你可以这样做:
<div data-bind="with: selectMenuSection">
<pre data-bind="text: ko.toJSON($data)></pre>
<span data-bind="text: name"></span>
</div>
这将打印出您所在的当前对象上下文。然后您将能够看到您有一个“name”属性以及与MenuSection相关的任何其他内容。