2013-11-09 65 views
2

在knockoutjs我如何通過當前項目引用的函數?通當前項目參考作用

我有我遍歷一個圖片庫,當用戶點擊我要檢查,如果照片中的用戶選擇在img標籤的特定類的照片。

這裏是一個不工作我當前的代碼。

my.Character = function() { 
    var self = this; 
    self.text = ko.observable(); 
    self.value = ko.observable(); 
    self.image = ko.observable(); 
    self.imageSrc= ko.computed(function() { 
     return "/Images/" + self.image(); 
    }, this); 
    self.selected = function ($data) { 

     if ($data.hasClass('selected')) { 
      // do stuff here 
     }; 
}; 

視圖

<div id="thumbnailsgall" data-bind='foreach: Characters'> 
    <a data-bind="click: function() { getImage(); }, attr: { rel: image, id: value }" class="thumb_nail" href="#">   
     <img class="inactive" data-bind="click: function() { selected($data); }, attr: { src: imageSrc }" /> 
    </a> 
</div> 
+0

你可以添加的看法? – Damien

+0

對不起達米安,一直試圖編輯我的文章,但它並沒有消除我的更新。這裏的觀點: –

+0

回答

1

這是非常簡單與css binding做:

我想你必須在父上下文中的字符數組,它應該是這樣的:

my.Parent = function(){ 
    var self = this; 
    self.Characters = ko.observableArray(); 
    // stores the selected character 
    self.selected = ko.observable();  
    self.select = function (character) { 
     if(self.selected() === character) 
      self.selected(null); 
     else 
      self.selected(character); 
    }; 
}; 

my.Character = function() { 

    self.text = ko.observable(); 
    self.value = ko.observable(); 
    self.image = ko.observable(); 
    self.imageSrc= ko.computed(function() { 
     return "/Images/" + self.image(); 
    }, this); 
}; 

視圖

<div id="thumbnailsgall" data-bind='foreach: Characters'> 
    <a data-bind="click: function() { getImage(); }, attr: { rel: image, id: value }" class="thumb_nail" href="#">   
     <img class="inactive" data-bind="click: $parent.select, attr: { src: imageSrc }, css :{'selected' : $parent.selected() === $data}" /> 
    </a> 
</div> 

請注意,KO會在調用select函數(click:$ parent.select)時隱式傳遞綁定的viewmodel和事件。 在別人KO調用

$parent.select($data, clickEvent) 

這就是爲什麼我可以這樣寫:

self.select = function (character) {}; 
+0

喜達,仍然沒有工作完全正確的 - 你的代碼將應用/切換.selected類照片中的用戶點擊上,允許用戶多選的照片 - 但我想在一個時間內只選擇一張照片 - 當用戶點擊應用.selected類照片,但也從庫中的所有其它照片刪除。問候融化 –

+0

@Melt Down,如果你只想同時選擇一張照片,你需要將選定的字符存儲在父上下文中。 – Damien