私は、次の設定を持つ 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
断片を除いて、画面に何もレンダリングされていません。
どんな助けでも大歓迎です。ありがとう。