【问题标题】:How to call a function in a backbone view from another backbone view如何从另一个主干视图调用主干视图中的函数
【发布时间】:2012-12-24 05:12:43
【问题描述】:

在我当前的应用程序中,我的一个主干视图中有一个save 函数。

custom_save : function() { // this method's save code // have to call another views save function here }

另一个视图名称是App.SettingsView,它有一个save 方法。我必须在 custom_save 逻辑之后立即调用此 save 方法。如何在 custom_save 函数中调用 App.SettingsView save 函数。请不要两者都是 2 个不同的文件

谢谢

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:

    这是一个不好的做法。视图之间的耦合。为什么不创建一个继承自 Backbone.Events 的 EventBus,然后触发另一个视图订阅的事件。当事件发生时,只需触发保存功能即可

    查看#1 保存

    save:function(){
     EventBus.trigger("save:view");
    }
    

    查看#2 保存

    initialize:function(){
     EventBus.on("save:view:",this.save);
    },
    save:function(){
    //your code
    }
    

    听起来不错?它应该:)

    【讨论】:

    • 我是否必须为此添加任何新库,因为它给了我 EventBus 未定义错误:(
    • @Mujahid window.EventBus = Backbone.Events.extend({}); 将此声明放在文档准备就绪之后和任何使用此eventBus的声明之前
    • 你有这个的 JSfiddle 吗?我想知道是否需要为此定义更多代码...因为它不会让我扩展Events
    • @Johannes 可能是 IDE 的自动补全出错,试一下代码告诉我控制台是否出现 js 错误
    • 是的,我想通了,这只是你的代码中的一个错字,你有一个额外的冒号。
    【解决方案2】:

    创建一个新的视图对象并调用它。

    var anotherView = new App.SettingView();
    anotherView.save();
    

    【讨论】:

    • 但是当我创建new App.SettingView() 时不会调用initialize()
    • 是的,确实如此。我假设您有一些不想触发的初始化代码?一种解决方法是传入一个参数 new App.Setting({execute: false})。但是,Deeptechtons 的解决方案肯定更优雅:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2017-10-04
    相关资源
    最近更新 更多