Как определить, был ли вид представлен?Javascript - PullRequest
4 голосов
/ 22 декабря 2011

Я создаю свое приложение, используя backbone.js

Как видно ниже, у меня есть layoutView, который я использую для визуализации макета, а также мини-профиль в макете.

У меня проблема со временем. Мне нужно сначала завершить метод render перед тем, как вызвать метод renderProfile. Как я могу это сделать?

Onethingaday.Views.Home ||= {}

class Onethingaday.Views.Home.LayoutView extends Backbone.View
  template: JST["backbone/templates/home/layout"]

  initialize: ->
    @options.user.bind('change',@render,@renderProfile, @)

  renderProfile: ->
    view = new Onethingaday.Views.Shared.MiniProfileView
      user: @options.user

    @$('.profile').html view.render().el

  render: ->
    $(@el).html(@template())
    @

1 Ответ

8 голосов
/ 22 декабря 2011

В вашей ситуации я написал LayoutManager для Backbone, http://github.com/tbranyen/backbone.layoutmanager.

То, что вы должны делать, - это отделить ваши подвиды от основного (макета) вида.

Таким образом, в вашем обратном вызове маршрута у вас будет что-то вроде этого:

// Initialize a Layout View
var profile = new Onethingaday.Views.Home.LayoutView();
// Initialize a MiniProfile View
var miniProfile = new Onethingaday.Views.Shared.MiniProfileView({
  model: user
});

// This appears synchronous in your code, so this should work fine
$(profile.render().el).find(".profile").html(miniProfile.render());

Я бы умолял вас исследовать мою библиотеку, так как я думаю, что декларативный способ, которым подчиненные представления связаны с макетами, действительно довольно элегантен.

...