如何在不刷新页面的情况下在EmberJS 1.13.8中呈现视图?

时间:2015-10-05 11:18:55

标签: ember.js

很抱歉,如果这个问题太天真,但我对Ember中的渲染视图感到很困惑。

我有一个' Person'路线。我可以对它进行CRUD操作。

router.js

  this.route('person', function() {
    this.route('index', { path: '' });
 });

控制器/人/ index.js

actions: {    
  createPerson: function() {
  var person = this.get('store').createRecord('person');
  this.set('person', person);
  this.set('editPersonPane', true);
},

editPerson: function(person) {
  this.set('person', person);
  this.set('editPersonPane', true);
},

closeEditPerson: function() {
 this.get('person').rollback();
 this.set('editPersonPane', false);
},

savePerson: function(person) {
  var _this = this;
  person.save().then(function() {
    _this.set('editPersonPane', false);
    Ember.get(_this, 'flashMessages').success('person.flash.personUpdateSuccessful');
  }, function() {
    Ember.get(_this, 'flashMessages').danger('apiFailure');
  });
},

deletePerson: function(person) {
  var _this = this;
  person.destroyRecord().then(function() {
    _this.set('editPersonPane', false);
    Ember.get(_this, 'flashMessages').success('person.flash.personDeleteSuccessful');
  }, function() {
    Ember.get(_this, 'flashMessages').danger('apiFailure');
  });
}
}

我现在想要做的是当我想要创建一个新人时,一个表格滑入以创建它。填写表单后,我希望立即更新人员列表视图,而无需刷新页面。现在,我已经能够添加表单,当我添加一个新人时,我得到一个成功的flash消息,但它没有在视图中立即更新。我必须刷新页面。

它可能需要与观察者做点什么,但我仍然不确定如何。

2 个答案:

答案 0 :(得分:1)

重新加载已保存的对象可以避免刷新页面:

savePerson: function(person) {
  var _this = this;
  person.save().then(function(saved) {
     saved.reload();
    _this.set('editPersonPane', false);
    Ember.get(_this, 'flashMessages').success('person.flash.personUpdateSuccessful');
  }, function() {
    Ember.get(_this, 'flashMessages').danger('apiFailure');
  });
}

此外,值得注意的是,如果您构造并使用ES6语法,您可以按如下方式清理代码:

//controllers/person/index.js
//at the top of the file
import Ember from 'ember';

const { get, set } = Ember;

//other code

  actions: {    

  //other actions

    savePerson(person): {
      person.save().then((saved) => {
        saved.reload();
        set(this, 'editPersonPane', false);
        get(this, 'flashMessages').success('person.flash.personUpdateSuccessful');
      }, () {
        get(this, 'flashMessages').danger('apiFailure');
      });
    }
  }

答案 1 :(得分:0)

哪条路线显示您的人员名单?

这样的东西不会更好用,所以你可以显示列表然后在persons.hbs插座中编辑一个人吗?

public PortletPreferences getStrictLayoutPortletSetup(Layout layout, String portletId) {

    long ownerId = PortletKeys.PREFS_OWNER_ID_DEFAULT;
    int ownerType = PortletKeys.PREFS_OWNER_TYPE_LAYOUT;

    if (PortletConstants.hasUserId(portletId)) {
        ownerId = PortletConstants.getUserId(portletId);
        ownerType = PortletKeys.PREFS_OWNER_TYPE_USER;
    }

    ...