具有参数的功能的可见绑定

时间:2011-07-12 11:45:19

标签: knockout.js

我收到以下错误:

  

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。

2 个答案:

答案 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?