Ember.js 与Ember.router的并发状态

Ember.js 与Ember.router的并发状态,ember.js,statechart,Ember.js,Statechart,我想在Ember.jsv1.5.x中使用Ember.Router实现这一点,但我在并发和历史机制方面有问题 基本上,当我激活摘要路由/状态时,我希望同时过渡到无更改和瞬态状态。我怎样才能做到这一点 另外,我知道,例如,我有这些功能,但不知道如何将其用于Ember.js路由。举个例子就好了 (图片来源:Ian Horrocks:使用状态图构建用户界面,第153页)。:) 是的,状态图很可爱,但Ember实际上通过计算属性提供子状态 我对状态图不太熟悉,我真的需要使用您在这里提到的资源(horroc

我想在Ember.jsv1.5.x中使用Ember.Router实现这一点,但我在并发和历史机制方面有问题

基本上,当我激活摘要路由/状态时,我希望同时过渡到无更改和瞬态状态。我怎样才能做到这一点

另外,我知道,例如,我有这些功能,但不知道如何将其用于Ember.js路由。举个例子就好了

(图片来源:Ian Horrocks:使用状态图构建用户界面,第153页)。

:)

是的,状态图很可爱,但Ember实际上通过计算属性提供子状态

我对状态图不太熟悉,我真的需要使用您在这里提到的资源(horrocks()),然后才能完全熟悉特定示例的命名法(如果您愿意,我可以这样做)

为此,尽管如此,请对我的回答持保留态度,因为我可能不完全理解上下文。我只是希望能帮上忙

所以在余烬你有路线。这些路由解释了应用程序的接口。这些将实际上是你们的国家。路由不是您的操作或事件。它们为你的应用程序提供了一个向全世界展示自己的URL

因此,A州似乎正在向学生们展示。你有两个子州在那里。。。0名学生和>0名学生。您可以使用相同的路由(称之为StudentsRoute)处理这些数据,因为它们都是关于同一组数据的,只是数据的不同子状态。这条路线可能有一条名为/students的路径。在这一点上,您将有一个控制器由路由器(学生列表)提供一个模型,因此为此,该控制器将是Em.ArrayController的扩展

此阵列控制器(自动命名为StudentsController,扩展了Em.ArrayController)自动具有一个“模型”,该模型一旦解析,即为students“阵列”

在StudentsController中,您可以轻松获得一个名为zeroCount的计算属性,该属性表示模型的零或非零状态。计算属性自动保持最新。可以这样定义:

App.StudentsController = Em.ArrayController.extend({
  zeroCount: function() {
  // zeroCount is true if zero, otherwise false
    return this.get('model.length') == 0;
  }.property('model.length');
});
{{#if zeroCount}}
  {{partial "noStudents"}}
{{else}}
  {{partial "someStudents"}}
{{/if}}
App.StudentsController = Em.ArrayController.extend({
  actions: {
    delete: function(itemToDelete) {
      itemToDelete.delete();
      // assuming the model "class" understands delete
    }
  }
});
在学生模板中,您可以根据此zeroCount状态有条件地呈现两个子模板中的一个子模板。。。你会这样做:

App.StudentsController = Em.ArrayController.extend({
  zeroCount: function() {
  // zeroCount is true if zero, otherwise false
    return this.get('model.length') == 0;
  }.property('model.length');
});
{{#if zeroCount}}
  {{partial "noStudents"}}
{{else}}
  {{partial "someStudents"}}
{{/if}}
App.StudentsController = Em.ArrayController.extend({
  actions: {
    delete: function(itemToDelete) {
      itemToDelete.delete();
      // assuming the model "class" understands delete
    }
  }
});
请注意,就这个例子来说,这有点过分了。。。您可能不需要像那样呈现其他模板(片段)。。有一种更简单的方法可以做到这一点,因为这是ember中的常见模式(呈现列表,如果列表中没有项目,则可以选择呈现其他内容,而不需要zeroCount属性)

编辑状态将有自己的路由。。。可能是学生上的嵌套路线,称为“编辑”,可能不取决于在“编辑”页面出现时是否希望列表显示在屏幕上

“更改”状态不是在路线上有效处理的,而是在模型上有效处理的。。。应该是。。。模型负责持久化对象图,或告诉视图和控制器模型是否已更改(例如,Ember数据将isDirty作为每个模型实例上的状态,可以告诉您模型是否已更改)

希望这能激发你的食欲。我建议浏览一下余烬网站上的一些例子。。。他们真的很有帮助,如果你还没有查出来,请使用Ember TODOMVC应用程序

Ember在这种基于流的状态驱动UI上蓬勃发展。。。如果你还没有。。。它们谈论流的方式与你谈论这些状态和子状态的方式完全相同


希望能有所帮助。

或者我的演讲,用流控制路由遍历::)很好!:-)这不是我昨天最后一次看的时候;-)看到conf的视频真的很高兴。我希望我有机会去那里。@nathanhammond我将把这个推荐给其他人,我最近一直在尝试帮助路由。。。谢谢我的回答对你有帮助还是解决了你的问题?如果是这样的话,你能接受它吗?或者如果你有关于更好的解决方案的更多信息,你自己回答吗?对不起,虽然它解决了这个问题,但我不确定用这种方式处理并发状态是否总是一件好事,但我想不出一个能启发这一点的情况(可能根本没有)。我也觉得处理状态更改会更适合模型。所以,总而言之,我接受它。谢谢你的帮助。我已经在这里上传了()到目前为止我得到的。