Ember.js 使用sproutcore路由的正确程序

Ember.js 使用sproutcore路由的正确程序,ember.js,Ember.js,好奇正确的程序,或者至少是使用的普通程序 在read me there中,它显示了路由的基本示例: SC.routes.add(':controller/:action/:id', MyApp, MyApp.route); 我假设在大多数情况下,MyApp.route会在提供的控制器上调用提供的操作。除了这一步之外,我的问题更多的是关于如何处理一个有很多主视图的应用程序的安装/拆卸工作 当控制器更改时,人们是否总是从一张干净的数据和视图开始实例化新控制器?还是更常见/更可取的做法是在加载时实例

好奇正确的程序,或者至少是使用的普通程序

在read me there中,它显示了路由的基本示例:

SC.routes.add(':controller/:action/:id', MyApp, MyApp.route);
我假设在大多数情况下,MyApp.route会在提供的控制器上调用提供的操作。除了这一步之外,我的问题更多的是关于如何处理一个有很多主视图的应用程序的安装/拆卸工作

当控制器更改时,人们是否总是从一张干净的数据和视图开始实例化新控制器?还是更常见/更可取的做法是在加载时实例化所有控制器等,并简单地使用路由来显示/隐藏主视图

我想当在控制器内的动作之间跳跃时,也会遇到同样的问题。是否应该进行一些拆卸,特别是在绑定/侦听器上,然后在调用操作时重新建立它们


我的问题可能有点模糊,但我基本上想知道人们如何处理大量的主视图,以及如何处理清理工作,这样东西就不会过时或占用大量资源。

在我所看到的大多数Ember和Sproutcore应用程序和示例中,控制器都是在应用程序初始化时实例化的。路由驱动状态图中的状态更改,在状态图中根据需要更新控制器并创建/销毁视图。

我有以下设置

在我的Ember.Application.create()中,我有以下代码:

MyApp.routes = Em.Object.create({
        currentRoute: null,

        gotoRoute: function(routeParams) {
            console.log('MyApp.routes gotoRoute. type: ' + routeParams.type + ' action: ' + routeParams.action + " id: " + routeParams.id);
            if (routeParams.type === 'expectedType' && routeParams.action === 'expectedAction' && routeParams.id) {
                //find item with ID and load in controller
                MyApp.MyController.findItemWithId(routeParams.id);
                //Navigate to the correct state
                MyApp.stateManager.goToState('stateName');
            }
        }
    })

    SC.routes.add(":action/:type/:id", MyApp.routes, 'gotoRoute');
然后,当我单击应该导致URL更改的内容时,我会:

    SC.routes.set("location", "show/item/ID-123-123");
您的应用程序现在应该正在侦听URL中的更改,并根据URL部分执行正确的操作


您可能会移动MyApp.MyController.findItemWithId(routeParams.id);调用状态图的enter()函数(如果正在使用),但确实需要将该ID存储在某个控制器中的某个位置

我写了一篇博客文章,描述了一种方法: