Backbone.js 在主干视图之间传递信息
前言:我是一个不折不扣的人。你在下面看到的很多可能是可怕的代码 因此,我得到的是: 我正在构建一个移动训练应用程序跟踪器。我正在使用这个框架来处理一些视图切换——这可能是我的问题,但值得怀疑 此应用程序有两种型号:Backbone.js 在主干视图之间传递信息,backbone.js,Backbone.js,前言:我是一个不折不扣的人。你在下面看到的很多可能是可怕的代码 因此,我得到的是: 我正在构建一个移动训练应用程序跟踪器。我正在使用这个框架来处理一些视图切换——这可能是我的问题,但值得怀疑 此应用程序有两种型号:app.Workout和app.Exercise。两者都不绑定到任何数据库后端,我现在只使用localStorage。这些型号还有2个系列,ala: var app = app || {}; (function() { 'use strict'; /* collection
app.Workout
和app.Exercise
。两者都不绑定到任何数据库后端,我现在只使用localStorage。这些型号还有2个系列,ala:
var app = app || {};
(function() {
'use strict';
/* collection */
app.ExercisesCollection = Backbone.Collection.extend({
model: app.Exercise,
localStorage: new Backbone.LocalStorage("Exercises")
});
/* create the collection */
app.Exercises = new app.ExercisesCollection();
})();
太好了,现在我们有了收藏品
正如你所知,有很多锻炼。这些训练中有相关的练习。我选择将这两个模型和集合分开,因为我认为这可能会变得太复杂。也许我错了
我的视图结构也是相当基本的。流程将类似于:
Home ->
Workouts ->
(you can add workouts here, or delete)
Exercises ->
(you can add exercises here, or delete)
Add Exercise
我正在努力解决的问题是如何在这些视图之间传递数据。例如,我添加了一项训练(效果很好,我只是添加到集合中)。现在我已选择了该训练,并希望在其中添加练习。很好,我加载了AddExerciseView
,但是该视图如何知道我要将锻炼添加到哪个训练中
我尝试过在选项中“传递”一些东西,但似乎不起作用
onClickButtonAdd: function() {
Jr.Navigator.navigate('add-exercise', {
workoutName: this.workoutName,
trigger: true,
animation: {
type: Jr.Navigator.animations.SLIDE_STACK,
direction: Jr.Navigator.directions.UP
}
});
}
我想通过workoutName,但那不起作用
我的想法是对的,还是有更好的方法来管理视图/模型(我听说过Marrionette)
谢谢 清洁连接视图有两种常见方法 将模型作为选项传递到视图 在这种情况下,您可以执行类似于
newaddexerciseview({workout:selectedWorkoutModel})
的操作,该视图将从用户收集数据,创建一个新的Exercise
model实例,并将其添加到初始化选项中获得的训练模型中
视图发出事件,路由器/控制器从中获取
在此版本中,您的AddExerciseView
只需收集数据,创建一个新的exercise
模型实例,然后发出类似create exercise
的事件。然后视图的工作完成了,它不知道也不关心从那时起练习模型实例会发生什么。在路由器或专用控制器对象中的“粘合”代码中,将事件侦听器绑定到addexercieview
实例,当create exercise
事件触发时,将新的练习模型实例添加到相应的训练实例中
通常情况下,第一个选项很好,尤其是对于较小的应用程序,而第二个版本只是在应用程序变得更大并且视图开始在多个不同的上下文中重用时才开始变得更可取