Backbone.js 从ajax中选择选项
我正在尝试使用下面的命令填充一个selectBackbone.js 从ajax中选择选项,backbone.js,backbone-stickit,Backbone.js,Backbone Stickit,我正在尝试使用下面的命令填充一个select View: Backbone.View.extend({ initialize: function () { this.setElement($('#templatePlaceholder')); }, bindings: { 'se
View: Backbone.View.extend({
initialize: function () {
this.setElement($('#templatePlaceholder'));
},
bindings: {
'select#List': {
observe: 'ddList',
selectOptions: {
collection: Q.when(getSelects.execute()).then(function (data) {
console.dir(data);
return data;
})
}
}
},
控制台返回一个数组对象:
[ { value: 1, label: "a" }, { value: 2, label: "b" } ]
但我什么也得不到
如果我将集合定义为:
collection: function () { return [{ value: 1, label: "a" },{ value: 2, label: "b" }];}
然后一切正常。这可能有两个问题:异步代码在
视图
被分配时会立即执行,这可能是不需要的;集合被分配给执行该承诺的结果,而不是返回数据所返回的任何内容
一些解决方案:
1) 您可以在页面加载时引导选择选项。这是单页或主干应用程序中的一种流行模式。基本上,您让后端将公共数据的json数据结构组合在一起,然后将其作为javascript变量呈现给页面。因此,服务器端模板(jsp、erb、php)的外观如下:
<!DOCTYPE html>
...
<script type="text/javascript">
window.bootstrap = { users: <%= userjson %>, ddlist: <%= ddlistjson %> };
</script>
...
不建议使用此方法,因为它可能会使您的UI处于一种不正常的状态,因为它会阻止其他javascript的运行,并且可能会挂断。此方法可能存在两个问题:在分配视图时,异步代码会立即执行,这可能是不需要的;集合被分配给执行该承诺的结果,而不是返回数据所返回的任何内容
一些解决方案:
1) 您可以在页面加载时引导选择选项。这是单页或主干应用程序中的一种流行模式。基本上,您让后端将公共数据的json数据结构组合在一起,然后将其作为javascript变量呈现给页面。因此,服务器端模板(jsp、erb、php)的外观如下:
<!DOCTYPE html>
...
<script type="text/javascript">
window.bootstrap = { users: <%= userjson %>, ddlist: <%= ddlistjson %> };
</script>
...
不建议使用此方法,因为它可能会使您的UI处于一种令人不安的状态,因为它会阻止其他javascript的运行,并且可能会挂断。非常感谢。我知道这不是一个stickit或主干问题,而是一个javascript问题,但不管怎样你都帮助了我。np,让我知道它是否适合你。另外,请在github repo中随意发布stickit问题,我会在那里更快地找到它们。再次感谢。我进一步采纳了你的建议。我将整个主干对象组包装在promise中,保持async:true。这样,我可以在扩展主干之前预加载所有prereq对象。我肯定这也有问题,但它现在起作用了,而且没有阻塞。你是怎么解决的。我也有同样的问题。谢谢非常感谢,马特。我知道这不是一个stickit或主干问题,而是一个javascript问题,但不管怎样你都帮助了我。np,让我知道它是否适合你。另外,请在github repo中随意发布stickit问题,我会在那里更快地找到它们。再次感谢。我进一步采纳了你的建议。我将整个主干对象组包装在promise中,保持async:true。这样,我可以在扩展主干之前预加载所有prereq对象。我肯定这也有问题,但它现在起作用了,而且没有阻塞。你是怎么解决的。我也有同样的问题。谢谢