Как мне ждать, пока Sproutcore 2.0 загрузит все шаблоны?
В моем приложении <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 ответ
Решение
Попробуй это:
MyApp.TweetInputView = SC.View.extend({
didInsertElement: function() {
console.log("I've been rendered!");
}
});