2014-02-11 65 views
0

所以我工作的一個迪朗達爾/淘汰賽應用,在那裏我點擊像這樣定義的按鈕:Durandal.js/Knockout.js - 是否有可能在compositionComplete之後返回原始點擊事件?

<button class="addNote" data-bind="click: function() { addNote($parent); }"> 
    <i class="fa fa-plus"></i> 
</button> 

我「addNote」處理器熄滅,組成一個新的視圖/模型(這基本上是一個很大的束縛textarea)並將它們插入到屏幕中。在組合結束時(在compositionComplete方法中),我使用knockout的hasFocus綁定將焦點設置在新創建的textarea上。

var compositionComplete = function (view, parent) { 
    setFocus(true); 
}; 

<textarea data-bind="value: note, hasFocus: setFocus" autofocus></textarea> 

這是因爲我的用戶能夠按「添加」按鈕,並開始而無需他們的光標放到< textarea的>字段中鍵入一個音符工作非常漂亮。除了移動設備(我嘗試過iPad,iPhone,Nexus平板電腦,Surface,samsung s3/s4,windows手機)。

的重點是< textarea的>(我可以告訴大家,因爲應用了集中式的,我們有),但用戶仍然需要點擊/點的< textarea的>獲得軟鍵盤打開實際設置。在大量的谷歌搜索和一些失敗的嘗試之後,我發現有些人注意到了原始點擊事件中<textarea>的成功。我想知道是否有辦法讓compositionComplete運行(這樣我知道<textarea>已被加載)到我的click事件中,這是一個非常新穎的方法,然後可以設置重點?就像一連串的承諾或某種連鎖事件?我的理論是,如果我可以等待點擊事件來設置焦點,鍵盤可能會彈出。

<button class="addNote" data-bind="click: function() { someEvent($parent); }"> 
    <i class="fa fa-plus"></i> 
</button> 

var someEvent = function (parent) { 
    addNote(parent); 
    //wait here until compositionComplete fires and then setFocus(true); 
}; 

回答

0

雖然它只是顯示在移動設備上,但可能只是一個計時問題。

所以我會開始使用Durandal的composition.addBindingHandler('hasFocus');http://durandaljs.com/documentation/Interacting-with-the-DOM.html能力來確保hasfocus在視圖組合之後觸發。

計劃b)槓桿Durandal的事件系統http://durandaljs.com/documentation/Leveraging-Publish-Subscribe.html。在這種情況下,您可能想要提供一個小小的實現https://github.com/dFiddle/dFiddle-2.0來演示該問題。這樣可能更容易找到觸發事件的最佳位置。

0

阻力最小的路徑可能只是觸發textarea上的click事件。

相關問題