2013-12-14 1 views
0

Я оцениваю EmberJs для проекта и работаю через ember screencast от Tom Dale. Но я не использую Ember Data и пытаюсь настроить наш контент (объект Post в этом примере).пытается получить ссылку на объект, который является моделью на маршруте Ember, не используя данные ember

В модели Ember Data он использует this.get ('store'). Commit() для сохранения и сохранения на сервере. Я пытаюсь получить объект сохранения на моей модели Post и называть его, когда пользователь нажимает кнопку, которая должна запускать метод save. Как мне это сделать? То, что я пробовал, находится внизу (this.save, this.model.save, this.post.save), но включил почти весь код. Кроме того, разумен ли этот общий подход?

ТНХ помощь

window.Hex = Ember.Application.create(); 

Hex.Router.map(function() { 
    this.resource('posts', function(){ 
     this.resource('post', { path: ':post_id' }); 
    }); 
}); 

// the model class 
Hex.Post = Ember.Object.extend({ 
    save: function(){ a 
     console.log("you clicked save"); 
    } 

}); 


Hex.PostRoute = Ember.Route.extend({ 
    model: function(params) { 
     return $.getJSON("/arc/v1/api/all-post", function(data){ 
     var post = Hex.Post.create(); 
     post.set('id', data.id); 
     return post; 
     }); 
    } 
}); 

Hex.PostController = Ember.ObjectController.extend({ 
    isEditing: false, 
    actions:{ 
    edit: function() { 
     this.set('isEditing', true); 
     console.log("within edit"); 
    }, 

    doneEditing: function() { 
     this.set('isEditing', false); 
     this.save(); // doesn't work trying to get a reference to the post object 
     this.model.save(); // doesn't work - undefined 
     this.post.save(); // doesn't work - undefined 
     //this.get('store').commit(); what is called in the sample app 
    } 
    } 
}); 

ответ

0

Мы на работе используют Ember без EmberData. Обычно мы помещаем любую логику, связанную с запросом, внутри моделей, следующих за шаблоном ActiveRecord. Таким образом, крючок модели внутри наших маршрутов обычно выглядит примерно так:

Hex.PostRoute = Ember.Route.extend({ 
    model: function(params) { 
    return Post.find(params); // returns a promise 
    } 
}); 

Ваша проблема очень проста. Внутри контроллера вы можете получить доступ к модели с content собственности, так что вам придется использовать что-то вроде этого:

this.get('content').save(); 

Я думаю, что это хорошая идея сохранения метод возвращает обещание, а также. Надеюсь, это поможет!

+0

thx, у меня не так много опыта с обещаниями - похоже на цепочку jQuery цепочек цепочек Rails. Я заметил, что это даже не похоже, что объект модели в PostController ObjectController вызывается и вместо этого генерируется автоматически из PostsController ArrayController. Мне нужно будет изучить это больше. – timpone

+0

Я задал отдельный вопрос о методах класса и Ember здесь: http://stackoverflow.com/questions/20586434/in-ember-how-to-create-a-class-method-on-ember-object-extend -that-can-work-to-ac, чтобы понять это. – timpone

+0

Чтобы максимально использовать маршрутизатор, определенно потребуется некоторое время, чтобы учиться и экспериментировать с обещаниями. –

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