Javascript canjs模板模型尚未准备就绪。数据绑定

Javascript canjs模板模型尚未准备就绪。数据绑定,javascript,deferred,canjs,canjs-model,Javascript,Deferred,Canjs,Canjs Model,我在渲染对象时遇到了一个问题,该对象在渲染模板时还没有准备好。因此,它在不进行数据绑定的情况下呈现空视图 使用延迟对象或其他方法来确保数据绑定的正确方法是什么 var Project = can.Model.extend({ findOne: 'GET /v1/project?id={id}' }) var ProjectControl = can.Control.extend({ selectedProject: '', init: function(el, opti

我在渲染对象时遇到了一个问题,该对象在渲染模板时还没有准备好。因此,它在不进行数据绑定的情况下呈现空视图

使用延迟对象或其他方法来确保数据绑定的正确方法是什么

var Project = can.Model.extend({
    findOne: 'GET /v1/project?id={id}'
})
 var ProjectControl = can.Control.extend({
    selectedProject: '',
    init: function(el, options) {
        /*Get data and initialize objects*/
        var self = this;
        Models.Project.findOne({
            id: 3
        }, function(project) {
            self.selectedProject = project;
        });
    },
    'route': function() {
        /*root route*/
        $('#projectView').html(can.view('projectViewTemplate', this.selectedProject));
    }

})

var pc = new Controllers.ProjectControl('body');
can.route.ready();
window.location.hash = '#!'
我尝试过用空模型初始化selectedProject,但这似乎有点像垃圾堆:

 new Models.Project({name:'Empty project'}, phases:[]) //Dump way for doing the databinding
当我需要使用项目的子对象(如项目阶段)时,这也不能解决问题

编辑: 我发现等待项目子对象的方式相当笨拙。我为模型的更改绑定了处理程序,因此现在即使刷新也可以工作。有没有更优雅的方法

'edit/:id route': function(data) {
    var data = data;
    var self = this;
    this.selectedProject.bind('name', function(ev) {
        $('#projectView').html(can.view(self.defaults.phaseEditProject, {
            'phase': self.selectedProject.phases[data.id],
        }));
    })
},
这样做:

init: function(el, options) {
    /*Get data and initialize objects*/
    var self = this;
    self.selectedProject = Models.Project.findOne({
        id: 3
    }).done(function(project) {
        self.selectedProject = project;
    });
},

将延迟值传递到can.view中,等待延迟值解析,然后使用其解析值。随后,如果路线发生变化,项目将位于选定的项目槽中,准备使用。

不工作。这似乎有效:init:function(el,options){var self=This;This.selectedProject.attr({id:3})Models.Project.findOne({id:3},function(Project){self.selectedProject=Project;});}