2013-05-14 2 views
2

Я работаю над своим первым приложением Ember.js, и хотя у меня есть загрузка шаблона, когда я пытаюсь вызвать действие, которое я определил в контроллере , Я получаю сообщение об ошибке: «Uncaught Error: Nothing обработал событие showNew». Я не уверен, что неправильно настроил маршрут и контроллер, или если мне не хватает чего-то другого.Ember.js Ошибка действий: «Ничего не обработано событие»

./router.js:

Seanchai.Router.map(function(){ 
    this.resource("stories", function(){ 
    this.route('new'); 
    }); 
}); 

Seanchai.StoriesRoute = Ember.Route.extend({ 
    model: function(){ 
    Seanchai.Story.find(); 
    } 
}); 


Seanchai.Router.reopen({ 
    location: 'history' 
}); 

./controllers/stories_controller.js:

Seanchai.StoriesController = Ember.ArrayController.extend({  

    showNew: function() { 
    this.set('isNewVisible', true); 
    } 
}); 

./templates/stories/index.hbs:

<table> 
    <thead> 
    <tr> 
    <th>ID</th> 
    <th>Name</th> 
    </tr> 
    </thead> 
    <tbody> 
    {{#each stories}} 
     {{view Seanchai.ShowStoryView storyBinding="this"}} 
    {{/each}} 
    {{#if isNewVisible}} 
     <tr> 
     <td>*</td> 
     <td> 
      Test 
     </td> 
     </tr> 
    {{/if}} 
    </tbody> 
</table> 
<div class="commands"> 
    <a href="#" {{action showNew}}>New Story</a> 
</div> 

Если Я перемещаю действие в маршрутизатор, так оно и работает, но на основе документации выглядит так, что я должен это сделать в контроллере.

обновляемые ./router.js:

Seanchai.Router.map(function(){ 
    this.resource("stories", function(){ 
    this.route('new'); 
    }); 
}); 

Seanchai.StoriesRoute = Ember.Route.extend({ 
    model: function(){ 
    Seanchai.Story.find(); 
    }, 
    events: { 
    showNew: function() { 
     this.set('isNewVisible', true); 
    } 
    } 
}); 


Seanchai.Router.reopen({ 
    location: 'history' 
}); 

Очевидно, я что-то отсутствует, но я не уверен, что.

ответ

3

Я думаю, ваше showNew события не стрельбы на контроллер, потому что у вас есть stories.index шаблона, так что вы должны подключить к контроллеру корреспондента, который должен быть StoriesIndexController:

Seanchai.StoriesIndexController = Ember.ArrayController.extend({  
    showNew: function() { 
    this.set('isNewVisible', true); 
    } 
}); 

Надеется, что это помогает

+0

Вот и все! Огромное спасибо. Я думал, что в отсутствие StoriesIndexController он свернется к действиям в StoriesController. Итак, мне нужен шаблон story.hbs, который будет использоваться для использования StoriesController, и в противном случае я бы использовал контроллер, соответствующий этому шаблону. Просто хочу убедиться, что я понимаю модель. – saalon

+1

в основном, когда у вас есть ресурс типа 'this.resource ('stories')', определенный на вашем маршрутизаторе, тогда вам нужен дополнительный маршрут 'index', чтобы иметь возможность подключиться, это не тот случай, если вы определяете только' this.route ('stories') ', см. здесь в разделе' resources' http://emberjs.com/guides/routing/defining-your-routes/ – intuitivepixel

0

Я думаю, что это должно быть:

Ember.ObjectController.extend({  

    showNew: function() { 
    this.set('isNewVisible', true); 
    } 

}); 

вместо:

Ember.ArrayController.extend({  

    showNew: function() { 
    this.set('isNewVisible', true); 
    } 
}); 

Это руководство может быть полезно - Ember.js - Templates.

+0

Я довольно уверен, что я дал этому вихрь, но просто чтобы убедиться, что я сделал это изменение, но получаю ту же ошибку. Я думаю, что ArrayController - это тот, который я хочу расширить, исходя из того, как он взаимодействует с моделью, но, похоже, это никак не влияет на эту проблему. Спасибо! – saalon

Смежные вопросы