1

试图创建一个页面,允许用户添加编辑和查看父子组合。

UI 有 3 列 Parent : List of parents Children : Child

我想配置控制器,以便用户可以回到他们所在的位置,但不需要拥有它,这样父和子都可以编辑。

// 使用骨干牵线木偶靠近,但仍有一些小问题

    MyRouter = Backbone.Marionette.AppRouter.extend({
        appRoutes: {
            '': 'AddClient',
            'View/:clientid': 'ViewClient',
            'Edit/:clientid': 'EditClient',
            'View/:clientid/Add': 'PolicyAdd',
            'View/:clientid/View/:policyid': 'PolicyView',
            'View/:clientid/Edit/:policyid': 'PolicyEdit'
        }
    });

    someController = {
        AddClient: function () {
            var someView = new ClientAdd();
            MyApp.clientPane.show(someView);
        },
        ViewClient: function (clientid) {
            var someView = new ClientView();
            MyApp.clientPane.show(someView);
        },
        EditClient: function (clientid) {
            var someView = new ClientEdit();
            MyApp.clientPane.show(someView);
        },
        PolicyAdd: function (clientid) {
            this.ViewClient(clientid);
            var someView = new PolicyAdd();
            MyApp.policyPane.show(someView);
        },
        PolicyView: function (clientid, policyid) {
            this.ViewClient(clientid);
            var someView = new PolicyView();
            MyApp.policyPane.show(someView);
        },
        PolicyEdit: function (clientid, policyid) {
            this.ViewClient(clientid);
            var someView = new PolicyEdit();
            MyApp.policyPane.show(someView);
        }
    };

拥有“this.ViewClient”会让人感觉很笨拙,而且也不起作用。

4

1 回答 1

8

多部分答案,在这里...

“this.ViewClient 不是函数”

这是 Marionette 中的一个错误。在路由器而不是控制器的上下文中调用控制器方法,因此调用this.ViewClient试图在路由器上找到它。

哎呀。

错误记录。将尽快修复。https://github.com/derickbailey/backbone.marionette/issues/38

--

更新:此错误现已在 Backbone.Marionette 的 v0.5.1 中修复https://github.com/derickbailey/backbone.marionette

--

要暂时解决此问题,您可以执行以下操作:

PolicyEdit: {
  someController.ViewClient();
  // ...
}

如果这不起作用,您可能需要使用 Underscore.jsbindbindAll方法来确保正确绑定控制器功能。

一旦我修复了错误,这些解决方法将不再必要......希望今天晚些时候/今晚。

基本上调用其他路线是操纵多个区域的最佳方式吗?

这个问题的直接答案是否定的。

但是,在这种情况下,您不会调用路由。你在你的控制器上调用一个方法。这很好——实际上,我会鼓励这样做。这是对您的对象的正确使用,并且是我认为应该做的事情之一,而不是调用另一个路由/路由器处理程序。

路由器和控制器

路由器是一项功能,而不是架构要求。您的应用程序应该在没有路由器的情况下工作,并且路由器应该只添加使用书签和浏览器的前进/后退按钮的能力。

考虑到这一理念(我知道这是有争议的),使用像您这样的控制器并在您的控制器上调用多个方法以使您的应用程序进入正确的状态,是正确的方法之一。

这样看:如果您从应用程序中删除路由器,您将被迫直接调用控制器上的方法。为了防止代码重复,您需要在控制器上创建许多可以很好地完成一件事的小方法,然后将这些较小的方法组合成更大的方法。

希望有帮助。:)

于 2012-03-01T15:24:32.373 回答