在itemView中跟踪上传进度
问题描述:
我正在开发带有Marionette/Backbone的应用程序。该应用程序需要通过AJAX调用上传文件(有这个工作)。我想告诉用户何时能够选择上传的文件并继续修改它们。我不知道当我有Model和ItemView时跟踪进度的最佳做法。我可以将它放在属性中,但据我所知,所有属性都会在同步到服务器时保存到数据库中。但ItemView需要能够听取模型的完成时间,但我不确定何时以及在哪里做到这一点。在itemView中跟踪上传进度
我已经解决了这个问题的一个更基本的解决方案,但它需要在Marionette/Backbone框架内工作。 ItemView控件
modelEvents: {
'change': 'fieldsChanged'
},
fieldsChanged: function() {
this.render();
},
答
的
有关部分一般情况下,你可能有多个ItemView
意见,每个都有自己的模型。要跟踪在该视图模型中发生的更改,通常会保留有关该模型的状态信息。为确保这些数据在您的ItemView
方法中可用,将范围限制到此变量的唯一方法是将其作为视图本身的属性。所以,在你的例子你可能会做这样的事情,
onClick: function (event) {
this.progress = 'pending';
this.model.save({ filename: this.file Name })
}
而当模型回来,你会怎么做
fieldChanged: function() {
this.progress = 'loaded';
this.render();
}
唯一的其他方式来储存模型元数据,并使其可在视图的上下文中将通过全局变量,但是这样做的缺点是双重的。在基本水平上,你想避免污染你的全球分数。更有问题的是,如何将全局变量引用到您的特定视图模型。通过允许视图跟踪所有模型元数据,您可以解决这两个问题,并可以更好地与最佳实践保持一致。
或者,也可能更自洽,您可以在模型本身上设置进度属性。即使模型从一个视图传递到另一个视图,状态信息也会遵循模型。和你的氛围会喜欢这样
onClick: function (event) {
this.model.progress = 'pending';
this.model.save({ filename: this.file Name })
}
而当模型回来,你会怎么做
fieldChanged: function() {
this.model.progress = 'loaded';
this.render();
}
增加一个属性项目视图如何?它们是视图与其模型之间的一对一腐蚀? – seebiscuit
如何将项目添加到项目视图?它们是视图与其模型之间的一对一腐蚀?顺便说一句,你可以在模型请求开始时听取模型的'request'事件,以及通过监听它的'sync'事件返回。 – seebiscuit
好的是我不想保存信息。有没有办法可以忽略更新的字段,或者如果我设置它,它会永远不会被保存吗? –