Javascript Durandal.js/Knockout.js-合成完成后是否可以返回到原始点击事件?

Javascript Durandal.js/Knockout.js-合成完成后是否可以返回到原始点击事件?,javascript,knockout.js,durandal,promise,Javascript,Knockout.js,Durandal,Promise,因此,我正在开发一个durandal/knockout应用程序,在该应用程序中,我单击一个按钮,定义如下: <button class="addNote" data-bind="click: function () { addNote($parent); }"> <i class="fa fa-plus"></i> </button> 我的“addNote”处理程序启动并组成一个新的视图/模型(基本上只是一个大的绑定文本区域),并将它

因此,我正在开发一个durandal/knockout应用程序,在该应用程序中,我单击一个按钮,定义如下:

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

我的“addNote”处理程序启动并组成一个新的视图/模型(基本上只是一个大的绑定文本区域),并将它们插入屏幕。在该组合的末尾(在compositionComplete方法中),我使用knockout的hasFocus绑定将焦点设置在新创建的textarea上

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

<textarea data-bind="value: note, hasFocus: setFocus" autofocus></textarea>
var compositionComplete=函数(视图,父级){
设置焦点(真);
};
这是非常好的工作,因为我的用户可以按下“添加”按钮,开始键入注释,而不必将光标放在字段中。除了移动设备(我试过iPad、iPhone、Nexus平板电脑、surfaces、三星s3/s4、windows手机)

焦点实际上是设置在上的(我可以说,因为我们已经应用了焦点样式),但是用户仍然需要单击/点击以打开软键盘。经过大量的谷歌搜索和几次失败的尝试后,我发现一些人在将焦点放在最初的点击事件上时注意到了成功

作为durandal/knockout的新手,充其量只是一个普通的js程序员,我想知道是否有一种方法可以让compositionComplete运行到我的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);
};

var someEvent=函数(父级){
addNote(母公司);
//在此处等待,直到compositionComplete激发,然后设置焦点(true);
};

可能只是一个时间问题,尽管它只出现在移动设备上

所以我开始使用Durandal的
composition.addBindingHandler('hasFocus')确保在合成视图后激发
hasfocus
的功能


计划b)利用Durandal的活动系统。在这种情况下,您可能希望提出一个具有最小实现的DFIDLE来演示这个问题。这样就更容易发现触发事件的最佳位置。

阻力最小的途径可能就是在文本区域触发
点击
事件