【问题标题】:Add new Item with ember.js使用 ember.js 添加新项目
【发布时间】:2013-10-31 15:58:18
【问题描述】:

我正在尝试在我的应用程序中添加新注释。我在索引模板和操作中有“新建”按钮:我的 Notes.NotesController 中的 createNote 但每次按下按钮时我都会得到: 未捕获的错误:没有处理事件“createNote”。

这里是我的html

   [...]   
  <script type="text/x-handlebars" data-template-name="index">  
    <div class="wrap">
      <div class="bar">
        <input type="text" class="search" />
        <div class="bar-buttons">
          <button {{action "createNote"}}> NEW </button>
          <button> HOME </button>
        </div>
      </div>
      <aside>
        <h4 class="all-notes">All Notes {{length}}</h4>
          {{#each item in model}}
            <li>
              {{#link-to 'note' item}} {{item.title}} {{/link-to}}
            </li>
          {{/each}}
      </aside>
      {{outlet}}
    </div> 
</script>

 <script type="text/x-handlebars" data-template-name="main"> 
   <section>
    <div class="note">
      {{input type="text" placeholder="Title" value=newTitle action="createNote"}}
      {{input type="text" placeholder="What you need to remember?" value=newBody action="createNote"}}
      {{input type="text" placeholder="Url:" value=newUrl action="createNote"}}
    </div>
   </section>
 </script>

  <script type="text/x-handlebars" data-template-name="note"> 
    <section>
        <div class="note">
            {{#if isEditing}}
              <h2 class="note-title input-title"> {{edit-input-note value=title focus-out="modified" insert-newline="modified"}} </h2>
              <p class="input-body"> {{edit-area-note value=body focus-out="modified" insert-newline="modified"}} </p>
              {{edit-input-note value=url focus-out="modified" insert-newline="modified"}}
            {{else}}
              <h2 {{action "editNote" on="doubleClick"}} class="note-title" > {{title}} </h2>
              <button {{action "removeNote"}} class="delete"> Delete </button>
              <p {{action "editNote" on="doubleClick"}}> {{body}} </p>
              {{input type="text" placeholder="URL:" class="input"  value=url }}
            {{/if}}
        </div>
      </section>
  </script>
  [...]

控制器:

Notes.NotesController = Ember.ArrayController.extend ({
    events:{
        createNote: function () {
            var title = this.get('newTitle');
            if (!title.trim()) { return; }
            var body = this.get('newBody');
            var url = this.get('newUrl');

            var note = this.store.createRecord('note', {
                title: title,
                body: body,
                url: url
            });

            this.set('newTitle', '');
            this.set('newBody', '');
            this.set('newUrl', '');

            note.save();
        }
    }
});

Notes.NoteController = Ember.ObjectController.extend({
    actions:{
        editNote: function(){
            this.set('isEditing', true);
        },

        modified: function(){
            this.set('isEditing', false);
            this.get('model').save();
        },

        removeNote: function(){
            var note = this.get('model');
            this.transitionToRoute('main');
            note.deleteRecord();
            note.save();
        }
    },
    isEditing: false

});

路由器:

Notes.Router.map(function () {
    this.resource('index', { path: '/' }, function (){
        this.resource('main', {path: '/'});
        this.resource('note', { path: ':note_id' });
    });
});

Notes.IndexRoute = Ember.Route.extend({
  model: function() {
     return this.store.find('note'); 
  }
});

Notes.MainRoute = Ember.Route.extend({ 
    model: function (){             
        return this.store.find('note'); 
    }
});

Notes.NotesRoute = Ember.Route.extend({ 
    model: function (){             
        return this.store.find('note'); 
    }
});

还有模特:

Notes.Note = DS.Model.extend ({
    title: DS.attr('string'),
    body: DS.attr('string'),
    url: DS.attr('string')
});

Notes.Note.FIXTURES = [
    {
        id: 1,
        title: 'hello world',
        body: 'ciao ciao ciao ciao',
        url: ''
    },
    {   
        id: 2,
        title: 'javascript frameworks',
        body: 'Backbone.js, Ember.js, Knockout.js',
        url: '...'

    },
    {
        id: 3,
        title: 'Find a job in Berlin',
        body: 'Monster, beralinstartupjobs.com',
        url: '...'
    }
]

查看:

Notes.EditInputNoteView = Ember.TextField.extend({
  didInsertElement: function () {
    $(this).focus();
  }
});
Ember.Handlebars.helper('edit-input-note', Notes.EditInputNoteView);



Notes.EditAreaNoteView = Ember.TextArea.extend ({
    didInsertElement: function () {     
        $(this).focus();
    }
})
Ember.Handlebars.helper('edit-area-note', Notes.EditAreaNoteView);

有人可以指导我走正确的道路吗? 提前致谢

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    动作属于动作散列,而不是事件散列,此外,您的动作链接在索引模板中,您的动作(在事件中)应该在索引控制器/路由中

     Notes.IndexController = Ember.ArrayController.extend({
      actions:{
        createNote: function () {
            var title = this.get('newTitle');
            if (!title.trim()) { return; }
            var body = this.get('newBody');
            var url = this.get('newUrl');
    
            var note = this.store.createRecord('note', {
                title: title,
                body: body,
                url: url
            });
    
            this.set('newTitle', '');
            this.set('newBody', '');
            this.set('newUrl', '');
    
            note.save();
        }
      }
    });
    

    【讨论】:

    • 我看不到您的解决方案是否有效,因为现在我得到不同的错误:未捕获的错误:尝试在 上处理事件didSetProperty 而在状态根.deleted.saved。使用 {name: body, oldValue: undefined, originalValue: undefined, value: undefined} 调用。当我单击“新建”按钮时。我无法弄清楚这个错误是什么意思,现在出了什么问题?
    • 我还有一个技术问题,什么时候应该使用 ember-data?使用 ember-data 开发应用程序更容易还是更难?
    • 从长远来看,Ember Data 让您的生活更轻松,虽然需要更多的设置时间,但完全值得。
    • 此时其他属性可能超出范围。
    • 超出范围是什么意思?我的意思是我真正的问题是了解如何正确创建一个新项目,因为每次我遇到新错误时,整个方法可能都不正确。
    猜你喜欢
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多