codestrong app使用骨干方法(开,关,触发)

时间:2014-05-02 17:08:26

标签: backbone.js controller titanium titanium-alloy

SDK 3.2.1

我正在研究CodeStrong-2012 app并且我注意到应用于控制器对象(on,off,trigger)的未记录方法。 后来,我找到了合金的ChangeLog:

  

1。0。0(2013年2月19日)   **突破性变化**

     

从View Proxies和控制器中删除了Backbone Events API   对于Alloy View代理和控制器,即使用$ .myid引用的对象   或者使用createController和getView方法创建,您不能使用Backbone Events   用于绑定和取消绑定事件回调或触发事件的API on,off和trigger方法。使用   改为使用Titanium SDK API addEventListener,removeEventListener和fireEvent方法。

     

以前,Alloy View代理和控制器可以使用Backbone Events API。

问题是,如果我在代码中更改它,例如,更改行:

 //oldSection is a controller created with Alloy.createController
oldSection.off('nav', sectionNav);

oldSection.removeEventListener('nav', sectionNav);

我收到错误:

[ERROR] :  V8Exception: Exception occurred at alloy/controllers/main.js:24: Uncaugh
t TypeError: Object #<Controller> has no method 'removeEventListener'

我做错了吗? 我应该继续使用Backbone方法开启,关闭,触发吗?

3 个答案:

答案 0 :(得分:0)

您无法向控制器对象添加和删除事件侦听器。但是,您可以在视图对象上执行此操作:

var view = oldSection.getView();
view.removeEventListener('nav', sectionNav);

Alloy.Controller只有少数方法没有on/offadd/removeEventListener

答案 1 :(得分:0)

这是我能找到的Appcelerator文档的唯一部分,它实际上讨论了on,off,触发事件:

http://docs.appcelerator.com/titanium/latest/#!/guide/Alloy_Collection_and_Model_Objects

http://docs.appcelerator.com/titanium/latest/#!/guide/Alloy_Collection_and_Model_Objects

看看结尾。

答案 2 :(得分:0)

对于新读者来说,一个伟大的Titanium Titan / dev,Fokke Zandbergen发布了这篇与上述评论相矛盾的文章。 http://www.tidev.io/2014/09/10/the-case-against-ti-app-fireevent-2/

从帖子: “你知道每个Alloy控制器都是一个事件调度程序吗?它扩展了Backbone.Events,你可以使用$ .trigger()和ctrl.on()。如果你不使用Alloy,你当然可以扩展Backbone的事件调度员就像我们在上一次考试中所做的那样,或者创建自己的调度员。

这些仅限JS的事件不会越过桥接器,Backbone会抛出一些很好的附加功能,比如ctrl.off(),它甚至可以删除对象的(某个事件)的所有侦听器。

BackBone 1.x具有更多与事件相关的优点,如once()和listenTo(),但目前Alloy仍然附带0.9.2。“

foo.js:

var bar = Alloy.createController('bar');

bar.on('logOut', function onLogOut(e) {

    // so bar doesn't keep us from GC
    bar.off('logOut', onLogOut);

    // so we don't keep bar from GC
    bar = null;
});

bar.js:

function onLogOutButtonClick(e) {
    $.trigger('logOut');

    // we can also free ourself from listeners
    // $.off();
}

我刚试过这个,它按预期工作!
- Ti SDK:3.3.0.GA - iPad 7.1模拟器