Global CRUD Ember.js

Global CRUD Ember.js,ember.js,ember-data,crud,ember-cli,Ember.js,Ember Data,Crud,Ember Cli,我想知道是否有人能给我简要的指示。我正在制作一个应用程序,我希望能够在应用程序(CRUD)中的任何位置记录笔记。我正在使用{{render}}在我的应用程序控制器中呈现我的演示文稿,但我不确定如何将完整的crud操作也放在那里。这就是我到目前为止所做的: --演示控制器 import Ember from 'ember'; var PresentationController = Ember.ObjectController.extend({ actions: { edit: fu

我想知道是否有人能给我简要的指示。我正在制作一个应用程序,我希望能够在应用程序(CRUD)中的任何位置记录笔记。我正在使用{{render}}在我的应用程序控制器中呈现我的演示文稿,但我不确定如何将完整的crud操作也放在那里。这就是我到目前为止所做的:

--演示控制器

import Ember from 'ember';

var PresentationController = Ember.ObjectController.extend({
  actions: {
    edit: function () {
      this.transitionToRoute('presentation.edit');
    },
    save: function () {
      var presentation = this.get('model');
      // this will tell Ember-Data to save/persist the new record
      presentation.save();
      // then transition to the current user
      this.transitionToRoute('presentation', presentation);
    },
    delete: function () {
      // this tells Ember-Data to delete the current user
      this.get('model').deleteRecord();
      this.get('model').save();
      // then transition to the users route
      this.transitionToRoute('presentations');
    }
  }
});

export default PresentationController;
import Ember from 'ember';

var PresentationsController = Ember.ArrayController.extend({
  actions: {
    sendMessage: function ( message ) {
      if ( message !== '') {
        console.log( message );
      }
    }
  }
});

export default PresentationsController;
--演示控制器

import Ember from 'ember';

var PresentationController = Ember.ObjectController.extend({
  actions: {
    edit: function () {
      this.transitionToRoute('presentation.edit');
    },
    save: function () {
      var presentation = this.get('model');
      // this will tell Ember-Data to save/persist the new record
      presentation.save();
      // then transition to the current user
      this.transitionToRoute('presentation', presentation);
    },
    delete: function () {
      // this tells Ember-Data to delete the current user
      this.get('model').deleteRecord();
      this.get('model').save();
      // then transition to the users route
      this.transitionToRoute('presentations');
    }
  }
});

export default PresentationController;
import Ember from 'ember';

var PresentationsController = Ember.ArrayController.extend({
  actions: {
    sendMessage: function ( message ) {
      if ( message !== '') {
        console.log( message );
      }
    }
  }
});

export default PresentationsController;
--型号

import DS from 'ember-data';

var Presentation = DS.Model.extend({
    title: DS.attr('string'),
    note: DS.attr('string')
});
--演示路线

import Ember from 'ember';

var PresentationsRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('presentation');
  }
});

export default PresentationsRoute;
import Ember from 'ember';

var PresentationRoute = Ember.Route.extend({
  model: function (params) {
    return this.store.find('presentation', params.id);
  }
});

export default PresentationRoute;
import Ember from 'ember';

export default Ember.Route.extend({
  model: function () {
    return this.store.find('category');
  },
  setupController: function (controller, model) {
    this._super(controller, model);
    controller.set('product', this.store.find('product'));
    controller.set('presentation', this.store.find('presentation'));
  }
});
--演示路线

import Ember from 'ember';

var PresentationsRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('presentation');
  }
});

export default PresentationsRoute;
import Ember from 'ember';

var PresentationRoute = Ember.Route.extend({
  model: function (params) {
    return this.store.find('presentation', params.id);
  }
});

export default PresentationRoute;
import Ember from 'ember';

export default Ember.Route.extend({
  model: function () {
    return this.store.find('category');
  },
  setupController: function (controller, model) {
    this._super(controller, model);
    controller.set('product', this.store.find('product'));
    controller.set('presentation', this.store.find('presentation'));
  }
});
--申请路线

import Ember from 'ember';

var PresentationsRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('presentation');
  }
});

export default PresentationsRoute;
import Ember from 'ember';

var PresentationRoute = Ember.Route.extend({
  model: function (params) {
    return this.store.find('presentation', params.id);
  }
});

export default PresentationRoute;
import Ember from 'ember';

export default Ember.Route.extend({
  model: function () {
    return this.store.find('category');
  },
  setupController: function (controller, model) {
    this._super(controller, model);
    controller.set('product', this.store.find('product'));
    controller.set('presentation', this.store.find('presentation'));
  }
});
--应用HBS

<section class="main-section">
      <div id="main-content">
        {{#link-to "presentations.create" class="create-btn expand" tagName="button"}} Add presentation {{/link-to}}
        {{render 'presentations' presentation}}
        {{outlet}}
      </div>
  </section>
{{#each presentation in controller}}
    {{#link-to 'presentation' presentation tagName='li'}}
      {{presentation.title}}
    {{/link-to}}
{{/each}}

{{outlet}}
{{outlet}}
<div class="user-profile">
  <h2>{{title}}</h2>
  <p>{{note}}</p>
  <div class="btn-group">
    <button {{action "edit" }}>Edit</button>
    <button {{action "delete" }}>Delete</button>
  </div>
</div>
--哈佛商学院演示文稿

<section class="main-section">
      <div id="main-content">
        {{#link-to "presentations.create" class="create-btn expand" tagName="button"}} Add presentation {{/link-to}}
        {{render 'presentations' presentation}}
        {{outlet}}
      </div>
  </section>
{{#each presentation in controller}}
    {{#link-to 'presentation' presentation tagName='li'}}
      {{presentation.title}}
    {{/link-to}}
{{/each}}

{{outlet}}
{{outlet}}
<div class="user-profile">
  <h2>{{title}}</h2>
  <p>{{note}}</p>
  <div class="btn-group">
    <button {{action "edit" }}>Edit</button>
    <button {{action "delete" }}>Delete</button>
  </div>
</div>
{{outlet}
{{title}}
{{note}}

编辑 删除
基本上你所描述的是一种模式。无论您查看的是哪一页(路线),都可以访问它,并且您将能够在此模式下执行操作(创建注释、编辑注释、删除注释等),而不会离开或影响后台显示的当前页面。从本质上说,这意味着你应该让路由器单独呆着,因为路由器是控制当前页面的,你不想影响它。您不希望有任何
{{{#link to}}
转接到
转接路线
呼叫,也不希望有任何与演示相关的路线或网点

相反,您必须在控制器和视图级别处理所有事情。这就是组件真正派上用场的地方,因为如果您正确使用它们,它们对于封装非常有用。在presentations.hbs中,我将使用组件来表示每个演示:

{{#each presentation in controller}}
  {{individual-presentation presentationModelBinding="presentation"}}
{{/each}}
请注意,您需要一个相应的
IndividualPresentationComponent
对象来扩展
Ember.Component
。更进一步说,在individual-presentation.hbs中,我的代码与您现在的代码类似,但考虑到各种CRUD操作:

{{#if editing}}
  {{input value=presentationModel.title}}
  {{textarea value=presentationModel.note}}
{{else}}
  <h2>{{title}}</h2>
  <p>{{note}}</p>
{{/if}}
<div class="btn-group">
  {{#if editing}}
    <button {{action "save" }}>Save</button>
  {{else}}
    <button {{action "edit" }}>Edit</button>
  {{/if}}
  <button {{action "delete" }}>Delete</button>
</div>
注意,我在这里使用的是
sendAction
。这就是组件与外部世界通信的方式。要使其正常工作,请返回您的presentations.hbs并截取如下操作:

{{#each presentation in controller}}
  {{individual-presentation presentationModelBinding="presentation"
                            save="savePresentation"
                            delete="deletePresentation"}}
{{/each}}
这里您基本上是说,如果组件发送“保存”操作,您希望使用控制器的“保存演示”操作来处理它,如果组件发送“删除”操作,您希望使用控制器的“删除演示”操作来处理它。因此,您的presentations-controller.js需要执行以下操作:

var PresentationsController = Ember.ArrayController.extend({
  actions: {
    savePresentation: function (presentationModel) {
      ...
    },

    deletePresentation: function (presentationModel) {
      ...
    },
  }
});

您可以删除
PresentationController
,因为它的所有功能现在都直接由您的
IndividualPresentationComponent
和您的
PresentationController

处理,基本上您所描述的是一种模式。无论您查看的是哪一页(路线),都可以访问它,并且您将能够在此模式下执行操作(创建注释、编辑注释、删除注释等),而不会离开或影响后台显示的当前页面。从本质上说,这意味着你应该让路由器单独呆着,因为路由器是控制当前页面的,你不想影响它。您不希望有任何
{{{#link to}}
转接到
转接路线
呼叫,也不希望有任何与演示相关的路线或网点

相反,您必须在控制器和视图级别处理所有事情。这就是组件真正派上用场的地方,因为如果您正确使用它们,它们对于封装非常有用。在presentations.hbs中,我将使用组件来表示每个演示:

{{#each presentation in controller}}
  {{individual-presentation presentationModelBinding="presentation"}}
{{/each}}
请注意,您需要一个相应的
IndividualPresentationComponent
对象来扩展
Ember.Component
。更进一步说,在individual-presentation.hbs中,我的代码与您现在的代码类似,但考虑到各种CRUD操作:

{{#if editing}}
  {{input value=presentationModel.title}}
  {{textarea value=presentationModel.note}}
{{else}}
  <h2>{{title}}</h2>
  <p>{{note}}</p>
{{/if}}
<div class="btn-group">
  {{#if editing}}
    <button {{action "save" }}>Save</button>
  {{else}}
    <button {{action "edit" }}>Edit</button>
  {{/if}}
  <button {{action "delete" }}>Delete</button>
</div>
注意,我在这里使用的是
sendAction
。这就是组件与外部世界通信的方式。要使其正常工作,请返回您的presentations.hbs并截取如下操作:

{{#each presentation in controller}}
  {{individual-presentation presentationModelBinding="presentation"
                            save="savePresentation"
                            delete="deletePresentation"}}
{{/each}}
这里您基本上是说,如果组件发送“保存”操作,您希望使用控制器的“保存演示”操作来处理它,如果组件发送“删除”操作,您希望使用控制器的“删除演示”操作来处理它。因此,您的presentations-controller.js需要执行以下操作:

var PresentationsController = Ember.ArrayController.extend({
  actions: {
    savePresentation: function (presentationModel) {
      ...
    },

    deletePresentation: function (presentationModel) {
      ...
    },
  }
});

您可以删除
PresentationController
,因为它的所有功能现在都直接由您的
IndividualPresentationComponent
和您的
PresentationController

处理,基本上您所描述的是一种模式。无论您查看的是哪一页(路线),都可以访问它,并且您将能够在此模式下执行操作(创建注释、编辑注释、删除注释等),而不会离开或影响后台显示的当前页面。从本质上说,这意味着你应该让路由器单独呆着,因为路由器是控制当前页面的,你不想影响它。您不希望有任何
{{{#link to}}
转接到
转接路线
呼叫,也不希望有任何与演示相关的路线或网点

相反,您必须在控制器和视图级别处理所有事情。这就是组件真正派上用场的地方,因为如果您正确使用它们,它们对于封装非常有用。在presentations.hbs中,我将使用组件来表示每个演示:

{{#each presentation in controller}}
  {{individual-presentation presentationModelBinding="presentation"}}
{{/each}}
请注意,您需要一个相应的
IndividualPresentationComponent
对象来扩展
Ember.Component
。更进一步说,在individual-presentation.hbs中,我的代码与您现在拥有的代码类似,但允许