【问题标题】:Marionette.ItemView render eventMarionette.ItemView 渲染事件
【发布时间】:2015-11-11 16:34:20
【问题描述】:

我很难解释我在寻找什么,所以我将从代码开始。

我有这样的木偶视图:

Marionette.ItemView.extend({
    model: new Models.Cards(),
    template: 'poker/cards',
    events: {
        'click player': 'playerClicked'
    },
    playerClicked: function( e ) {
        // THIS WORKS!
    }
}

我该如何做这样的事情:

    events: {
        'click player': 'playerClicked',
        'render player': 'playerRendered'
    },

以便在呈现<player> 时调用playerRendered

【问题讨论】:

  • 您能否扩展您的问题以包含有关此处发生的情况、这些对象是什么以及它们如何交互的更多信息?

标签: javascript backbone.js marionette backbone-views backbone-events


【解决方案1】:

如果你想在ItemView本身被渲染时运行一些代码,使用onRender

Marionette.ItemView.extend({
  // ...
  onRender: function() {
    console.log("Rendered the ItemView!")
  }
  //...
})

Marionette 没有用于呈现ItemView部分的内置事件。

【讨论】:

  • 如果我有这个模板:{#myplayers} {/myplayers} - 所以, 玩家列表, onRender 将在整个列表被渲染时被调用。我想在渲染单人项目时捕捉事件
  • 换句话。在渲染过程中,我需要在少数玩家(不是所有人)中更改 css。仅在少数特定球员中。这就是为什么我需要单人渲染事件,而不是整个列表
  • 在这种情况下,您应该使用 CollectionView,它为每个玩家呈现一个 ItemView。
  • 您能否说明一下,我该如何在您的回答中做到这一点?提前致谢!
【解决方案2】:

@joews 是对的。如果您想对正在呈现的 ItemView 的特定部分做出反应,您应该对整个 ItemView 的 render 事件做出反应。当您渲染 ItemView 时,它会在内存中渲染整个模板,然后将其作为一个整体附加到 DOM。如果要渲染模型集合,则可以使用集合视图,每个 ItemView 将独立渲染。

如果您想要一个使用 CollectionViews 和 CompositeViews 设置视图的示例,请查看渲染四手五张牌的小提琴,所有牌都有随机值:http://jsfiddle.net/kjdgygy5/

【讨论】:

    猜你喜欢
    • 2015-07-02
    • 1970-01-01
    • 2012-07-18
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    相关资源
    最近更新 更多