0

Я получил свою магистральную модель определен как это:Backbone Возвращает атрибуты возвращают неопределенные

define (require) -> 
Backbone = require 'backbone' 
class IndexModel extends Backbone.Model 
    defaults: 
    status: "" 
    country: "" 
    language: "" 

    initialize: (attributes,options) -> 
    @set 'country', attributes.country 
    @set 'language', attributes.language ||= 'en' 

    url: -> "/v0/index/#{@get 'country'}/#{@get 'language'}.json" 

А потом мой взгляд, как это:

define (require) -> 
Backbone = require 'backbone' 
template = require 'text!templates/index-page.html' 
IndexModel = require 'cs!models/index' 

class IndexView extends Backbone.View 
    template: _.template(template) 

    el: 'article.main' 
    events: 
    "click .image_button": "connect" 

    initialize: -> 
    _.bindAll(@, "render","connect") 
    @render() 

    render: -> 
    @$el.html(@template) 

    connect: (e) -> 
    @model = new IndexModel({country: e.currentTarget.alt, language: window.language}) 
    @model.save() 
    console.dir @model 
    console.log 'Status: ', @model.get 'status 
    no 

Я пытаюсь получить атрибуты статуса, но он появляется быть пустым и возвращаться не определено.

Что я здесь делаю неправильно?

ответ

2

Я предполагаю, что на сервере задан атрибут status. Если это так, вызов model.save() является асинхронным, и атрибут будет недоступен до его завершения. Для того, чтобы получить доступ к нему, вам нужно будет связать в успех обратного вызова передается при вызове сохранить, например:

_self = @ 
@model.save success: -> 
    console.log 'Status: ', _self.model.get('status') 

в качестве альтернативы можно привязать к «синхронизации» события на модели, которая будет срабатывать после каждого успешного сохранения, для пример:

@model.on 'sync', (model) -> 
    console.log 'Status: ', model.get('status') 
0

@robmisio Большое спасибо за ваш ответ я попытался оба ваши предположить, но никто не работал для меня .. я использовать эту работу вокруг ...

connect: (e) -> 
    @model = new IndexModel({country: e.currentTarget.alt, language: window.Language}) 
    $('#spinner_ajax').show() 
    @model.save(null, { 
    success: @success 
    error: @error 
    }) 

error: (xhr, status, thrown) -> 
    console.log "AJAX Error: #{status}" 
    alert "AJAX Error: #{status}: Server is probably down." 
    $('#spinner_ajax').hide(); 
    no 
success: (model) -> 
    console.log "Status: #{model.get('status')}" 
    if model.get('status') 
    window.lmStatus = true 
    window.location.hash = 'connection' 
    $('#spinner_ajax p').html('You are being redirected ') 
    else 
    alert 'This connection is currently not active.' 
    $('#spinner_ajax').hide(); 
    no 
Смежные вопросы