0

我一直在努力解决这个问题。我正在使用主干来渲染模型,并为我的下拉菜单选择了插件。

当一个新的集合进来时,jQuery slideDown 效果被用来渲染每个模型。每个模型都有一个选择下拉列表,需要填充超过 600 个选项。

我遇到的问题是,如果我先填充下拉菜单,那么 slideDown 动画就会断断续续,实际上通常只是被忽略(突然我的模型出现了,没有动画。)

我尝试过的另一个选项是先渲染模型,只为特定下拉列表附加模型的值,然后设置它的选定值。然后,调用 setTimeout 并填充其余选项(在幕后)。然而,在这种情况下,最终会出现明显的、令人讨厌的延迟。如果我没有设置超时,那么它会尝试填充尚不存在的下拉菜单。

我是否错过了如何有效地做到这一点的东西?我正在缓存选择下拉列表的选项列表。我已经尝试将所有选项循环到一个字符串中并替换下拉列表的 html,并循环遍历每个选项并一次附加一个。

我认为我的问题更多地与动画和 600 多个下拉选项的组合有关。理想情况下,模型出现后,它会立即填充下拉列表,不会有任何延迟。

4

2 回答 2

0

您不一定需要超时。您可以在主干中创建自己的事件。

initialize: function () {
  // When our event is triggered, load the dropdowns.
  this.on( 'doneWithThings', this.loadDropdowns );
},

// render the view
render: function () {
  // Whatever it is that you do when rendering.
  // When you're done rendering, trigger an event.
  this.trigger( 'doneWithThings' );
},

loadDropdowns: function () {
  // Load them!
}

其他我会尝试的事情......

将选项保留在客户端(JS 数组)中,但不要将它们绘制到屏幕上,除非用户已展开屏幕的该 slideDown 部分。同样,当 slideDown 效果发生时引发一个事件。

于 2012-10-29T18:00:12.540 回答
0

理想情况下,模型出现后,它会立即填充下拉列表,不会有任何延迟。

不知道 blackbone 但如果有一些动画,你可以看看 jquery .promise()

$(":animated").promise().done(function() {
    //load data
  });​
于 2012-10-29T18:52:39.537 回答