2015-05-11 5 views
0

Так что это может быть немного связано. Полное приложение, если вы сильно зацикливаетесь и хотите запустить его для себя, это on github.Сервис не обновляется постоянно

(Если вы это сделаете, вам необходимо войти в систему, имя пользователя и пароль в API/tasks/populate.rake ... только не говори никому, к?)

Я использую Ember State Services следить из isClean Состояние компонента редактора (используется hallo.js).

Вот некоторые примеры кода, со сценарием, и проблема у меня с ним:

Когда содержание в редакторе изменен, hallo.js выстреливает hallomodified событие. В didInsertElement крюке компонента, я прилагаю слушатель JQuery событий, который устанавливает isClean свойства ложно, и регистрирует его в консоль, чтобы мы могли проверить это на самом деле работает:

JfEdit = Ember.Component.extend 
    editorService: Ember.inject.service('jf-edit') 
    editorState: Ember.computed('page', -> 
    @editorService.stateFor(@page)   # page is passed in to the component 
              # in the route template 
).readOnly() 
    # ... 
    didInsertElement: -> 
    self = @ 
    @$().on("hallomodified", -> 
     console.log "modified" 
     self.get('editorState.isClean') = false 
     console.dir self.get('editorState') # -> Logs: Class -> __ember123456789:null, 
              #     isClean: false 
              # in the console (but I have to click on 
              # isClean to show the value) 
    ).hallo(
     # ... 
    ) 

`export default JfEdit` 
# Full code is at https://github.com/clov3rly/JoyFarm/blob/master/app/app/components/jf-edit.em 
# (written in emberscript, which is an adaptation of coffeescript) 

Это похоже на работу , editorState.isClean = false в консоли.

Итак, когда мы пытаемся перейти от страницы, мы проверяем состояние редактора, чтобы предложить пользователю сохранить.

NewPostRoute = Ember.Route.extend 
    model: -> 
    @*.store.createRecord 'post', 
     title: "New Post" 
     content: "Content here." 
    editorService: Ember.inject.service('jf-edit') 
    editorState: Ember.computed('model', -> 
    @editorService.stateFor(@model) 
).readOnly().volatile() 
    actions: 
    willTransition: (transition) -> 
     model = @modelFor('posts/new') 
     console.log "editorState:", @get('editorState.isClean') 
                 # -> logs true, after the log in 
                 # the file above logged false. 
     console.dir @get('editorState')     # -> Logs: Class -> 
                 #  __ember123456789:null 
                 # (the same number as above) 
                 # but the isClean property is 
                 # not in the log statement 
     # ... 

     unless @get('editorState.isClean') 
     confirm("Do you want to discard your changes?") || transition.abort() 

# Full code at https://github.com/clov3rly/JoyFarm/blob/master/app/app/routes/posts/new.em 

Так что теперь editorState.isClean возвращает false (и не отображается при регистрации самого объекта). Однако первое свойство объекта имеет тот же ключ, который я предполагаю, является некорректным идентификатором?

Шаблон выглядит следующим образом:

{{{jf-edit page=model save="save" class="blog editor"}}} 

Так, page в файле component/jf-edit должен быть тот же объект, model в файле routes/new.

Файлы службы/состояния довольно просты, если вы хотите их увидеть, вы можете найти их в this gist (или в самом репо).

ответ

1

Оказывается, эта проблема исчезает, если я храню редакторState на контроллере и смотрю this.controller.editorState в маршруте actionTransition.

Thanks Grapho and locks on IRC;)