我如何等待Sproutcore 2.0加载所有模板?

时间:2011-09-02 23:17:32

标签: javascript sproutcore sproutcore-2

在我的应用中,<body>标记只包含一个<script type="text/x-handlebars>标记,其中包含我的所有观看次数。 Sproutcore 2.0很好地添加了一个jQuery on-document-ready处理程序,它解析这些模板并将它们呈现回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();
  }
});
初始化
// 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 个答案:

答案 0 :(得分:5)

试试这个:

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