骨干& Jquery Mobile渲染样式不起作用 - 用CoffeeScript编写

时间:2012-08-14 12:43:11

标签: jquery-mobile backbone.js coffeescript

我正在使用骨干jquery mobile和coffee脚本开发一个简单的twitter应用程序。我的问题是jquery移动样式无法呈现。我的观点是

class HomeView extends Backbone.View
constructor: ->
    super

initialize: ->
    @Twitter= new TwitterCollection

template: _.template($('#home').html())

render: ->
    @loadResults()

loadResults: ->
    @Twitter.fetch({
        success: (data) =>
            $(@.el).html(@template({data: data.models, _:_}))

        error: ->
            alert('Error!')
    })

这在从Twitter提取信息方面效果很好,但是

$(@.el).html(@template({data: data.models, _:_}))

在fetch函数内,jquerys样式不呈现。任何人都可以告诉我如何刷新样式?非常感谢帮助!

作为参考,html模板是:

<script type="text/template" id="home">

<div data-role="header" data-position="fixed">
    <h1>TWITTER DATA</h1>
</div>

<div data-role="content">
    <ul data-role="listview"  data-inset="true">
        <% _.each(data, function (row) { %>
            <li><a href="#tweet-<%= row.get('id') %>"><%= row.get('text') %></a></li>
        <% }); %>
    </ul>

    </ul>
</div>

2 个答案:

答案 0 :(得分:1)

好的,我通过添加“.listview('refresh')来修复它。触发器('create');”

结尾
$(@.el).html(@template({data: data.models, _:_}))

答案 1 :(得分:0)

之后应用修复程序(在$.mobile.changePage()呈现视图页面之后),用户会产生令人不快的副作用:视图因jquery mobile应用的样式更改而闪烁。 / p>

我对此问题的解决方案是在动态呈现完成后从视图中触发自定义事件,并将$.mobile.changePage()绑定到该事件。这会导致输出“缓冲”直到完成,然后完全设置样式。

以下是一个例子:

在我的视图的initialize函数中,我有代码等待模型/集合在获取时触发的事件以及用于呈现html的动态部分的函数:

window.MyView = Backbone.View.extend({

// some other code here

initialize: function() {
    this.listenTo(this.collection, "fetchCompleted:CollectionName",  this.renderRows);
},

renderRows: function (eventName) {
    $(this.el).find('div[class="content-primary"]').html(this.template_ul({data: this.collection}));
    this.trigger( 'view:ready' );
},
//...

...然后在路由器中我有changePage()的以下代码:

myViewObject.on( 'view:ready', function() {
    $.mobile.changePage($(next.el), {changeHash:false, transition: transition});
});