Как мне ждать, пока Sproutcore 2.0 загрузит все шаблоны? - PullRequest
1 голос
/ 03 сентября 2011

В моем приложении тег <body> содержит только один тег <script type="text/x-handlebars>, который содержит все мои представления. Sproutcore 2.0 прекрасно добавляет обработчик готовых документов jQuery, который анализирует эти шаблоны и возвращает их обратно в DOM.

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

Пример

страница
<body>
  <script type="text/x-handlebars">
    ...
    {{view "MyApp.TweetInputView"}}
    ...
  </script>
</body>
Посмотреть:
MyApp.TweetInputView = SC.View.extend({
  init: function() {
    // act like a singleton
    MyApp.TweetInputView.instance = this;
    return this._super();
  },
  focus: function() {
    ...
    this.$().focus();
  }
});
Initializer
// if the URL is /tweets/new, focus on the tweet input view
$(function() {
  if (window.location.pathname === '/tweets/new') {
    // doesn't work, because the view hasn't been created yet:
    MyApp.TweetInputView.instance.focus();
  }
});

Я также пытался SC.run.schedule('render', function() { MyApp.TweetInputView.instance.focus(); }, 'call'); в надежде, что Sproutcore запустит его после всех операций рендеринга и вставки представления, но, похоже, это не так.

1 Ответ

5 голосов
/ 03 сентября 2011

Попробуйте это:

MyApp.TweetInputView = SC.View.extend({
  didInsertElement: function() {
    console.log("I've been rendered!");
  }
});
...