我收到以下错误:
Microsoft JScript运行时错误:无法解析绑定属性 消息:TypeError:期望的对象;属性值:可见:
IsVisible('Area')
我试图隐藏/显示基于某些评估的html元素。这是我的代码:
var viewModel = {
propertyTypeList: ko.observableArray([]),
selectedPropertyType: ko.observable(""),
visibleFeatures: ko.observableArray([]),
IsVisible : function(featureName){some logic here}
};
这就是观点:
<div class="editor-field">
<select data-bind="options: propertyTypeList,
optionsText: 'PropertyTypeName',
value: selectedPropertyType,
optionsCaption: 'select property type...'">
</select>
</div>
<div class="editor-label" data-bind="visible: IsVisible('Area')">
Area
</div>
<div class="editor-label" data-bind="visible: IsVisible('Bedroom')">
Bedroom
</div>
函数IsVisible
将根据selectedPropertyType
和功能名称进行一些评估,并返回true或false。
答案 0 :(得分:1)
尝试按以下方式调用方法
<div class="editor-label" data-bind="visible: $root.IsVisible('Area')">
或
<div class="editor-label" data-bind="visible: viewModel.IsVisible('Area')">
答案 1 :(得分:1)
如果您希望动态更改这些div的可见性(您似乎可能),则需要将isVisible设为computedObservable。这将确保isVisible逻辑在observable(它依赖)改变时重新运行。
它可以返回一个字符串,您可以将其可见性绑定到(data-bind =“visible:isVisible()==='Area'”),或者如果它们不相关,您可以为每个div创建不同的计算值。 (isAreaVisilbe,isBedroomVisible,...)你的viewModel基本上变成了这样的东西:
function ViewModel() {
var self = this;
self.propertyTypeList = ko.observableArray(['Area', 'Bedroom', 'Other']);
self.selectedPropertyType = ko.observable("");
self.visibleFeatures = ko.observableArray([]);
self.visibleDiv = ko.computed(function () {
//Your logic here
return self.selectedPropertyType();
});
我做了一个基本的工作示例,说明我认为你想在这里做些什么http://jsfiddle.net/ZqWDS/5/ 不得不将viewModel更改为一个函数,以便isVisible属性可以引用其他属性。 (How to reference properties of current object in JS)。您可以在knockout computedObservables页面上阅读标题为“简化事物的流行约定”的部分,以获取有关我为何以这种方式构建viewModel构造函数的更多详细信息。
我不确定在问题的顶部是什么导致了您的错误。我将您的代码粘贴到jsFiddle中,它基本上有效(只需进行一些语法编辑)http://jsfiddle.net/GBkdK/
如果您仍然遇到问题并希望提供更多背景信息,我很乐意提供帮助。
修改强> 对不起,我认为我错了isVisible需要计算。它似乎可能只是你原来拥有它的功能。 http://jsfiddle.net/ZqWDS/6/
knockoutjs: can we create a dependentObservable function with a parameter?