0

私は、次の設定を持つ SpineJs アプリに取り組んでいます: テキスト メッセージ ストリームやチャット ルーム ストリームとまったく同じように、それぞれに複数のメッセージが含まれる投稿 (基本的にはチャット ルーム)。機能を動作させるのに問題がありSpine.Listますが、私は何かを正しくしていないのではないかと思います…</p>

コントローラーとビューの Gist を作成しました: https://gist.github.com/coolbox/6880967

post.main.coffee

Spine   = require('spine')
$       = Spine.$

# Models
Post       = require('models/post')
Session    = require('models/session')
Message    = require('models/message')

class Show extends Spine.Controller
  className: 'show content-area'

  events:
    'submit form': 'submit'

  elements:
    '.messages' : 'messages'

  constructor: ->
    super
    @html require('views/posts/show')
    @active @change

    @list = new Spine.List
      el: @messages
      template: require('views/messages/message')
      selectFirst: true

    @list.bind 'change', @render

    Post.bind 'refresh', @render
    Message.bind 'create', @change

  render: =>
    return if !@postId
    @post = Post.exists(@postId)

    if @post
      messages = @post.messages
      @list.render(messages)

    @html require('views/posts/show')(@post)

  change: (params) =>
    if params.id != @postId
      @postId = params.id

    if Session.first()
      Post.fetch
        id: @postId

    @render()

  submit: (e) =>
    e.preventDefault()
    message = Message.fromForm(e.target)
    message.save()


class Main extends Spine.Stack
  className: 'main stack'

  controllers:
    show: Show

module.exports = Main

show.eco

<ul class='messages'></ul>

<div class='footer'>
  <form class='new-message'>
    <input type="hidden" name="post_id" value="<%= @id %>">
    <textarea name='body' placeholder='Type your message here…' autofocus='autofocus'></textarea>
    <input type='submit' value='Send'>
  </form>
</div>

message.jeco

<li class='item'>
  <%= @body %>
</li>

Post に属する「メッセージ」が、Post オブジェクト内のオブジェクトの配列として含まれていることがわかります。私の疑いでは、メッセージは Spine オブジェクトではないため、私のSpine.list. もしそうなら、私の最良の選択肢は何ですか?

注意として、私はコンソールにエラーが発生しておらず、私が持っている他のいくつかのnav断片を除いて、画面に何もレンダリングされていません。

どんな助けでも大歓迎です。ありがとう。

4

0 に答える 0