Ember.Application.initializer({
name: 'appBootstrap',
initialize: function(container, app) {
app.deferReadiness(); //Останавливаем инициализацию
Ember.$.ajax("urlToData").then(function(data) {
//Делаем нужные дела с data
//Положить данные в store можно так
var store = container.lookup('store:main');
store.pushPayload('data', data);
app.advanceReadiness(); //Продолжаем загрузку
});
}
});
var newPost = this.store.createRecord("post", {
title: this.get("title"),
text: this.get("text"),
intro: this.get("intro")
});
var _this = this;
newPost.save().then(function() {
_this.transitionToRoute("admin.posts");
});
App.SaveModelMixin = Ember.Mixin.create({
onGlobalKeyDown: function() {
Ember.$(document).on('keydown', {view: this}, this.globalKeyDown);
}.on('didInsertElement'),
offGlobalKeyDown: function () {
Ember.$(document).off('keydown', this.globalKeyDown);
}.on('willDestroyElement'),
globalKeyDown: function (e) {
if ((e.keyCode === 83) && (e.ctrlKey)) {
e.preventDefault();
App.Tabs.tabs("option", "active"); //узнаем активный в данный момент таб
console.log('ctrl + s');
// e.data.view - представление
// e.data.view.get('controller') - контроллер, можно слать экшены
// e.data.view.get('controller.model') - модель роута
}
}
});
App.Filefolder = DS.Model.extend({
type: DS.attr('string'),
name: DS.attr('string'),
children: hasMany('filefolder', {async: true, inverse: 'parent'}),
parent: belongsTo('filefolder', {async: true, inverse: 'children'}),
isOpen: false
});
<script type="text/x-handlebars" data-template-name="filefolders">
{{#each controller }}
{{name}} {{type}}
{{#if isOpen}}
<ul>
{{#each children itemController="filefolder"}}
<li>{{name}} <span {{action "loadChild" }}>(o)</span></li>
{{/each}}
</ul>
{{/if}}
{{/each}}
</script>
App.ApplicationAdapter = DS.RESTAdapter.extend({
coalesceFindRequests: true
});
1) Богатый интерфейс с множеством форм
2) Авторизация и разделение пользователей по ролям
3) Различные уведомления о новых событиях (пришла почта, менеджер спустил задачу, приближается срок выполнения и т.п.)
5) Относительно быстрый старт для написания прототипа
Материалы для изучения с официального сайта уж очень поверхностны на первый взгляд, а где смотреть готовые примеры не нашел.
Возможно ли с ним быстро "стартануть" и сделать некий прототип приложения?
var newPost = this.store.createRecord('post', {
title: this.get('title'),
body: this.get('body'),
url_pic: this.get('url_pic'),
publish: new Date().getTime()
});
var _this = this;
newPost.save().then(function(newPost) {
_this.get('category.posts').pushObject(newPost);
}, function() {
newPost.rollback();
});
{{#each item in model}}
<div>
<h1>{{item.name}}</h1>
<a {{action "removeItem" item}}>remove</a>
</div>
{{/each}}
App.ListController = Ember.Controller.extend({
actions: {
removeItem: function(model) {
model.destroyRecord();
}
}
});
App.ItemListComponent = Ember.Component.extend({
item: null,
actions: {
removeItem: function() {
var item = this.get('item');
item.destroyRecord();
}
}
});
{{#each item in model}}
{{item-list item=item}} //извиняюсь за тавтологию
{{/each}}
то есть action в дочернем контроллере не перехватывается, если вставить в ListController нужный action
И может кто посоветовать какие-нибудь материалы по изучению, а то официальный гайд ответы на все вопросы не дает, он описывает все отдельными примерчиками, а какого-то комплексного подхода ко всему не дает. Даже немного обескураживает такой простой момент, что в гайде показывают как использовать ObjectController, но при попытке использования выдается информация, что уже deprecated, используйте просто Controller. Соответственно использование ObjectController и itemController непосредственно в шаблоне решает вопрос с экшеном в дочернем, но при переделке под "новые" стандарты (Controller и itemController в коде контроллера) работать перестает.
Может быть вопрос очень глупый, но я первый день его смотрю и пока не могу сообразить, где же я совершаю ошибку.