前言:我是一个Backbone noob。你在下面看到的大部分内容都可能是可怕的代码。
所以这就是我所拥有的: 我正在构建移动Workout应用跟踪器。我使用Junior框架来处理一些视图切换 - 这可能是我的问题,但令人怀疑。
此应用有两种型号: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();
})();
很好,所以现在我们有了这个系列。
如你所知,有锻炼。这些锻炼在其中有相关的练习。我选择将2个模型和集合分开,因为我认为它可能会变得过于复杂。也许我错了?
我的视图结构也很基础。流程将类似于:
Home ->
Workouts ->
(you can add workouts here, or delete)
Exercises ->
(you can add exercises here, or delete)
Add Exercise
我挣扎的是如何在这些视图之间传递数据。例如,我添加了一个Workout(工作正常,我只是添加到集合中)。现在我选择了Workout,并希望为它添加练习。好的,我加载了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)。
谢谢!
答案 0 :(得分:2)
有两种常用方法可以清晰地连接视图。
在这种情况下,您可以执行类似new AddExerciseView({workout: selectedWorkoutModel})
的操作,该视图将从用户收集数据,创建新的Exercise
模型实例,并将其添加到其初始化选项中获得的锻炼模型中
在此版本中,您的AddExerciseView
只会收集数据,创建新的exercise
模型实例,然后发出类似create-exercise
的事件。然后视图的工作就完成了,从那时起它就不知道也不关心练习模型实例会发生什么。在你的"胶水"可以存在于路由器或专用控制器对象中的代码,将事件侦听器绑定到AddExerciseView
实例,并在create-exercise
事件触发时,将新的运动模型实例添加到相应的锻炼实例中。
通常,第一个选项很好,特别是对于较小的应用程序,第二个版本开始变得更好,因为您的应用程序变得更大,并且视图开始在几个不同的上下文中重用。