2013-01-05 14 views
0

我有我的代碼2個問題:KnockoutJs不禁止我輸入的圖像,但不能使

爲什麼輸入圖像禁用(上徘徊無手形光標),但是當TreeDiv有任何元素(樹存在)和節點被選中時,輸入圖像仍然被禁用。它沒有啓用。

這是爲什麼?

我也想知道爲什麼我需要的視圖模型實例及其無處使用...(從作者的網站多數民衆贊成代碼)

<input type="image" id="CreateSiblingUnit" data-bind="value: selectedUnit,enable: isUnitSelected" src="~/Content/Images/unitaddsibling.png" title="Create sibling unit" data-url="@Url.Action("CreateSibling", "Unit")" /> 

var viewModel = { 
       isUnitSelected: ko.observable(false), 
       selectedUnit: $('#TreeDiv').children().length > 0 && $("#TreeDiv").dynatree("getActiveNode") != null 
      }; 

ko.applyBindings(viewModel); 

回答

2

在您的視圖模型,

isUnitSelected: ko.observable(false), 

定義isUnitSelected爲一個初始值爲false的可觀察值,但我看不到任何將它設置爲true的東西。因此,綁定(enable: isUnitSelected)將導致它被禁用,直到某些內容更改isUnitSelected的值。

我對視圖模型中的兩個屬性有些困惑。第一個將始終是錯誤的,第二個將是布爾值,所以名稱「selectedUnit」沒有多大意義。

我不確定dynatree是什麼,但我想象你可能需要綁定某種事件(當選擇節點時等),並相應地設置視圖模型中的屬性。例如。

// In your view model: 
isUnitSelected: ko.observable(false), 
selectedUnit: ko.observable() 

// In some event handler, update the view model's properties each time a node is clicked 
var hasNodes = ($('#TreeDiv').children().length > 0); 
var activeNode = null; 
if (hasNodes) { 
    activeNode = $("#TreeDiv").dynatree("getActiveNode"); 
} 
selectedUnit(activeNode); 
isUnitSelected(hasNodes && activeNode !== null); 

視圖模型在線路上使用:

ko.applyBindings(viewModel); 

在這種情況下,您的視圖模型只是一個基本的JavaScript對象。您也可以使用稍微複雜一點的語法(但最終更有用),這樣可以創建視圖模型「對象」的實例:

var ViewModel = function() { 
    var self = this; 

    self.isUnitSelected = ko.observable(false); 
    //... 
} 

ko.applyBindings(new ViewModel());