2011-07-12 66 views
4

我收到以下錯誤功能結合:可見與具有參數

Microsoft JScript runtime error: Unable to parse binding attribute.
Message: TypeError: Object expected; Attribute value: visible:
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。

+1

它應該工作;一個類似的例子適用於我> http://jsfiddle.net/EhEsd/。選擇數據綁定是否有效? – neebz

+0

如果視圖模型中存在布爾值屬性,則可以爲我和可見綁定工作的文本和值綁定。當它是一個函數時不工作 –

+0

你可以在IsVisible函數內顯示你正在做什麼嗎?它應該返回true/false。你的上面的代碼看起來都是集合的,還有一些是導致bug的東西。 – neebz

回答

1

嘗試調用方式如下

<div class="editor-label" data-bind="visible: $root.IsVisible('Area')"> 

<div class="editor-label" data-bind="visible: viewModel.IsVisible('Area')"> 
1

的方法。如果你想這些div的可見性,以動態地改變(這好像是你可能),你會想使isVisible一個computedObservable。這將確保isVisible邏輯在觀察對象(取決於)發生變化時得到重新運行。

它可以返回一個字符串,你可以將你的可見性綁定到(data-bind =「visible」:isVisible()==='Area'「),或者你可以爲每個div創建一個不同的計算結果。 (isAreaVisilbe,isBedroomVisible,...)你的視圖模型基本上變成了這樣的事情:

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/ 不得不改變你的視圖模型是一個基本工作示例一個函數,以便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?

+0

但是,您是否也可以將參數發送到計算的可觀察值以獲得不同的結果? – Wrench