Вопрос

Это должен быть очень основной вопрос о Backbone.js, я являюсь новичком в JavaScript/Backbone.js, я прочитал несколько учебных пособий, но мне не удалось выполнить довольно простую задачу: «Извлекая список записей из база данных".

Все приложения в Google App Engine. База данных уже включает в себя несколько записей «слова», и я использовал колбу, чтобы отправить представления JSON записей.

Вот функция, которую я использовал для этой задачи:

@wordbook.route('/words', methods=('GET', 'POST'))
def wordlist():
    return retrieve_words()


def retrieve_words():
    content = json.dumps([word.to_dict() for word in Word.all()])
    response = make_response(content)
    response.mimetype = 'application/json'
    return response

Итак, насколько я понимаю, как будет работать программа, мое приложение для основы будет в корне веб -сайта, он попросит URL «/слова» получить некоторые данные из базы данных в определенном формате, называемом JSON, так что приложение может использовать его свободно.

Я предполагаю URL http://localhost:8080/words верен, так как вывод является следующим:

[{"word": "keyboard", "key": "ahB2b2NhYnVsYXJpdW0tYXBwcgoLEgRXb3JkGAEM", "language": "en", "nature": "noun", "usage": "Plural keyboards", "gender": ""}, {"word": "keyboard", "key": "ahB2b2NhYnVsYXJpdW0tYXBwcgoLEgRXb3JkGBoM", "language": "en", "nature": "verb", "usage": "Regular verb", "gender": ""}, {"word": " mouse", "key": "ahB2b2NhYnVsYXJpdW0tYXBwcgoLEgRXb3JkGB4M", "language": "en", "nature": "noun", "usage": "Plural  mousemice", "gender": ""}, {"word": " mouse", "key": "ahB2b2NhYnVsYXJpdW0tYXBwcgoLEgRXb3JkGDIM", "language": "en", "nature": "verb", "usage": "Regular verb", "gender": ""}, {"word": " hard", "key": "ahB2b2NhYnVsYXJpdW0tYXBwcgoLEgRXb3JkGDoM", "language": "en", "nature": "adj", "usage": "Comparative  harder, superlative  hardest", "gender": ""}...]

В корне веб -сайта у меня есть пустая веб -страница (сначала я хочу начать с очень простых задач), с простым файлом JavaScript (наряду с зависимостями, JSON2, JQUERY, Underscore и BACKBONE).

Я новичок в JavaScript, поэтому я использовал CoffeeScript, потому что синтаксис относительно похож на то, что я на самом деле знаю в Python, поэтому я подумал, что кривая обучения будет менее крутой. Вот мой кофе -файл так:

class Word extends Backbone.Model

class WordList extends Backbone.Collection
    model: Word
    url: 'words'

Words = new WordList

class WordView extends Backbone.View
    tagName: 'p'
    render: ->
      word = @model.get 'word'
      $(@el).html word
      @

class WordListView extends Backbone.View        
    el: $ 'body'
    initialize: ->
      _.bindAll @, 'addOne', 'addAll'
      Words.bind 'add',     @addOne
      Words.bind 'refresh', @addAll
      Words.fetch()

    addOne: (word) ->  
      view = new WordView model: word
      @.$ 'body'.append view.render().el

    addAll: ->
      Words.each @addOne    
->  WordList = new WordListView

Подводя итог, что я написал здесь, я создал модель под названием «Слово», и коллекция, которая содержит все слова. Эта коллекция должна получить все данные с сервера, используя URL JSON. Каждое слово может быть отображено с их собственным конкретным представлением (WordView), в абзаце с. В представлении приложения (WordListView) я просто связываю действие добавления с функцией добавления, а также действие обновления с функцией Addall. И я пытаюсь принести все слова в это время. Функция добавления создает новый представление о соответствующем словом и добавляет к телу новый абзац, который должен содержать слово. Каждый раз, когда добавляется новое слово, связывание запускает функцию добавления, визуализируя каждое слово.

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

Это было полезно?

Решение

Если я правильно понимаю ваш вопрос, вы пытаетесь понять, почему Words не населен, когда вы бежите Words.fetch(). Анкет У меня есть несколько вопросов к вам:

  1. Какова ценность WordList.url? Так должно быть "/words" для вашего примера.
  2. А Метод принимает success а также error обратные вызовы ...

Это означает, что вы можете отлаживать следующим образом (при условии, что у вашего браузера есть консоль разработчика):

Words.fetch
  success: (collection, response) -> console.log "success: #{response}"
  failure: (collection, response) -> console.log "failure: #{response}"

Когда вы это делаете, что вы видите в консоли?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top