新元素

时间:2015-04-22 14:09:03

标签: ember.js

我有一个主题列表,可以在页面加载时收到bootstrap popover事件。

但是当我在没有重新加载页面的情况下向这个列表中添加新主题时,我无法在这个新主题中绑定popover事件。

我的代码以这种方式组织:

论坛路线:

export default Ember.Route.extend({
  model: function() {
    return Ember.RSVP.hash({
      run: this.store.find('run', this.modelFor('dialogo.admin.manager').get('id')),
      topics: this.store.find('topic', { run: this.modelFor('dialogo.admin.manager').get('id') })
    });
  },
  setupController: function (controller, model) {
    controller.set('runID', this.modelFor('dialogo.admin.manager').get('id'));
    controller.set('model', model.topics);
    controller.set('currentRun', model.run);
  }
});

论坛管制员:

export default Ember.Controller.extend({
  needs: ['application'],
  activeUser: Ember.computed.alias("controllers.application.model"),
  actions: {
    createTopic: function() {
      var
        store = this.get('store'),
        user = this.get('activeUser'),
        run = this.get('currentRun'),
        topic;

      topic = store.createRecord('topic', {
        content: '',
        run: run,
        moderator: user
      });

      this.set('newTopic', topic);
    },
    saveNewTopic: function() {
      var newTopic = this.get('newTopic');
      var topicList = this.get('model');

      newTopic.save().then(function(topic){
        topicList.pushObject(topic);
        Ember.$('#newTopic').modal('hide');
      });
    },
    deleteTopic: function (topic) {
      topic.destroyRecord();
    }
  }
});

论坛观点:

export default Ember.View.extend({
  didInsertElement: function() {
    this.$('[data-toggle="popover"]').popover({
      html : true,
      content: function() {
        var delID = Ember.$(this).attr('data-del');
        return Ember.$('#alertDel' + delID).html();
      }
    });
  }
});

论坛模板:

  <tbody>
    {{#each topic in model}}
      <tr>
        <th scope="row">{{topic.id}}</th>
        <td>{{topic.content}}</td>
        <td>{{topic.posts.length}}</td>
        <td>0</td>
        <td>
          <button class="btn btn-default" type="button" data-toggle="popover" data-placement="top" data-trigger="focus" data-del="{{topic.id}}" title="ATENÇÃO: Deletar tópico">
            DEL
          </button> |
          <span>EDIT</span> |
          <span>PEND</span> |
          <span>MOD</span>
          <div id="alertDel{{topic.id}}" style="display: none;">
            Você deseja deletar o tópico #ID {{topic.id}}?
            Essa ação não poderá ser desfeita.
            <br><br>
            <button class="btn btn-danger" {{action 'deleteTopic' topic}}>Sim</button> |
            <button class="btn btn-default">Não</button>
          </div>
        </td>
      </tr>
    {{else}}
      <tr>
        <td rowspan="5">Nenhum tópico encontrado...</td>
      </tr>
    {{/each}}
  </tbody>

因此,当我执行saveNewTopic并将此新主题添加到topicList时,我丢失了popover事件。

任何人都知道如何在新主题实例上绑定我的popover事件?

1 个答案:

答案 0 :(得分:0)

你可以参考ember cookbook来了解如何处理bootstrap pop over,这最好的方法是通过一个动作从路由器创建一个组件或渲染。

http://guides.emberjs.com/v1.10.0/cookbook/user_interface_and_interaction/using_modal_dialogs/

App.ApplicationRoute = Ember.Route.extend({
   actions: {
       showPopUp: function(name, content){
           //the controller for will help you let you access the content from your controller (if using a component)
           this.controllerFor(name).set('content', content);
           this.render(name, {
               into: 'application',
               outlet: 'popup'
           });
       },
       removePop: function(){
           this.disconnectOutlet({
              outlet: 'popup',
              parentView: 'application'
           });
       }
}
   }
});

在主应用程序中,您需要添加弹出式插座

<setion id="main-content">
  {{ outlet }}
</section>

<section id="footer-scroll">
    {{partial "partials/footer"}}
</section>

{{outlet 'popup'}}

你会触发像这样的节目弹出事件

<a href="#" {{action 'showPopUp' 'select-country-pop' this}} class="cl-7 footer-text-desk ft-w-600">

在您的论坛模板中,您可以使用相同的方式

<button class="btn btn-default" type="button" data-del="{{topic.id}}" title="ATENÇÃO: Deletar tópico" {{action 'showPopUp' 'popuptemplate' this}}>
        DEL
      </button>
  • 您需要创建弹出模板,为了您的理智,如果您创建一个组件
  • 会更容易
  • &#34;这个&#34;,只是意味着它将继承模型中的数据