Получение простого списка записей - PullRequest
0 голосов
/ 23 июля 2011

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

Все приложения в Google App Engine.База данных уже содержит несколько записей «слов», и я использовал Flask для отправки 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 «/ words» получить данные из базы данных в определенном формате, называемом 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

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

Я не знаю, правильно ли я понял.

1 Ответ

1 голос
/ 23 июля 2011

Если я правильно понимаю ваш вопрос, вы пытаетесь понять, почему 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}"

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

...