我了解到,不用使用model.findAll和在findAll的回调函数中编写代码,我们可以通过使用新的model.List({})来实现这一点。例如,小提琴-> http://jsfiddle.net/CRZXH/48/ .在这个例子中,List实现可以工作,但是findOne失败了。
var people = new Person.List({});
return can.Component({
tag: 'people',
template: initView,
scope: {
people: people
}
})上面的示例很好,最初分配给人的对象是空对象,但是在ajax调用了complete people变量之后,就会使用list更新和视图更新来更新它。
如何在findOne的情况下实现同样的功能?
var person = PersonModel.findOne({});
can.Component({
tag: 'person',
template: initView,
scope: person
})这失败了..。
我确实做了如下的工作:
var person;
PersonModel.findOne({},function(data){
person = data
});
can.Component({
tag: 'person',
template: initView,
scope: person
})只有当我在asyn=false调用中添加findeOne时,这才能起作用。
发布于 2014-09-08 15:43:58
1- findOne的ID是强制性的
findOne({id: modelId})2-您可以将person模型放到视图模型(AKA组件范围)中,而不通过值,为此使用can.stache插件和can.map.define插件。
can.fixture({
"GET api/people":function(){
return [
{id: 1, name: "Person 1"},
{id: 2, name: "Person 2"}
];
},"GET api/people/{id}":function(request,response){
return {id: request.data.id, name: "Person "+request.data.id}
}
});
can.Model.extend('Person',{
findAll: 'GET api/people',
findOne: 'GET api/people/{id}',
},{});
can.Component.extend({
tag:'x-person',
scope:{
define:{
person:{
get:function(currentPerson,setFn){
Person.findOne({id: 2}, setFn);
}
}
}
}
});
var frag=can.view('personTmpl',{});
$('#main').html(frag);这是小提琴b/egq85zva/
https://stackoverflow.com/questions/25716480
复制相似问题