2016-06-27 37 views
0

我必須在控件id動態生成attr綁定後調用viewmodel方法。使用attr綁定生成控件ID後調用viewmodel方法

下面是我的html代碼

<div data-bind="attr: {id: 'bookScreen_' + bookId }"> 
</div> 

一旦控制ID生成我要打電話到我正在做使用$(ID)選擇一些工作的方法。

一旦id爲div生成,我該如何調用viewmodel方法?

回答

1

的一般規則是:

每當你想觸摸DOM,

  1. 嘗試做盡可能多的通過淘汰賽的默認綁定。大多數事件處理可以通過使用eventclick綁定來完成。值可以通過valuetextInput綁定鏈接到您的視圖模型。樣式可以與css一起使用。
  2. 如果沒有默認綁定,create a custom binding

某些缺省綁定具有afterRender選項,可以在其中指定將被傳遞到其綁定已採用的元件(例如,foreach結合)的回調方法。但是,這些方法是爲了用於動畫/轉換;不推薦更改DOM。

定製與init方法結合的一個例子:

ko.bindingHandlers.logIDAfterBind = { 
    init: function(element) { 
    console.log(element.id); 
    } 
}; 

隨着HTML:

怎麼辦:在評論的問題後

<div data-bind="attr: {id: 'bookScreen_' + bookId }, logIDAfterBind"></div> 

編輯我傳遞一個常量到我的自定義綁定處理程序?

init方法的簽名實際上比我在我的簡化示例中顯示的要多得多。您可以使用bindingKey: bindingValue將值(實際上任何有效的javascript)傳遞到綁定。例如:

<div data-bind="attr: {id: 'bookScreen_' + bookId }, logIDAfterBind: 'a_constant_string'"></div> 

該值通過的init第二個參數包裹在一個功能和可訪問:

init: function(element, valueAccessor) { 
    var myConstant = valueAccessor(); // Will be "a_constant_string" 
} 

在同時支持可觀察到的和其他值綁定,你會經常看到ko.unwrap感用過的。

// Gets the value from the binding; if it's an observable, 
// it "gets" the inner value 
var bindingValue = ko.unwrap(valueAccessor()); 
+0

非常好的解決方案,我想從html傳遞一個值假設我想傳遞常量50與元素一起查看模型我該怎麼做? –

+0

我編輯了我的原始答案以包含對您問題的回答。 – user3297291

+0

Thnak你我想通了:) –

相關問題