【问题标题】:How to call backbone route without changing view如何在不改变视图的情况下调用主干路由
【发布时间】:2014-05-27 08:21:30
【问题描述】:

我有三个主干路由

  routes: {
                   "foo": "foo",
                   "": "foo",
                   "foo/bar": "bar",
                   "foo/baz": "baz"

            },
            foo: function () {                                                      
                var fooView = new contentCollectionView({
                    collection: collection,
                    tagName: "div",
                    className: "foo"
                });

                fooView.close();
                FOO.content.show(fooView);

            },
          bar: function(){
            this.foo();
            ...
          },
          baz: function(){
            this.foo();
            ...
          }
    });  

对于 bar 和 baz 函数,我真的希望只在 fooView 当前未显示时才运行 foo,否则他们唯一要做的就是更改一个 CSS 类来更改 foo 的显示方式。

【问题讨论】:

    标签: backbone.js backbone-routing


    【解决方案1】:

    可以对比url片段,

    bar: function () {
      if ( Backbone.history.getFragment() !== 'foo' ) {
        this.foo();
      } else {
        // do other stuff
      }
    }
    

    如果这有帮助,请告诉我

    【讨论】:

    • 嗨,我想我可以使用 getFragment 来确定 this.foo() 是否已在我们的模块历史记录中被调用 - 但如果我当前不调用 this.foo()然后什么都没有被渲染 - 如果它已经被渲染,我实际上不需要渲染任何东西,然后我只需要切换一个 css 类。我想我可以使用 jquery 或其他东西来检查如果事情被渲染的话会存在的元素 - 但我更喜欢更高级别的更主干的解决方案。
    • 好吧,在这种情况下,您需要一个管理器来呈现视图(可能是 AppView 或 AppController)。因此,每当您创建新视图时,请在属性“current_view”中跟踪它们,然后您就可以知道 current_view 是什么并相应地做出决定。有关 current_view 的实施,请参阅 stackoverflow.com/questions/7379263/…
    猜你喜欢
    • 2014-07-21
    • 1970-01-01
    • 2016-11-01
    • 2012-08-17
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    相关资源
    最近更新 更多