1

我正在使用主干 jquery 移动和咖啡脚本来开发一个简单的 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>

4

2 回答 2

1

好的,我通过添加“.listview('refresh').trigger('create');”来修复它 到结束

$(@.el).html(@template({data: data.models, _:_}))
于 2012-08-14T15:28:49.510 回答
0

之后应用修复时(在视图页面由 渲染和显示之后$.mobile.changePage()),用户会得到一个令人不快的副作用:由于 jquery mobile 应用的样式更改,视图会闪烁。

我对这个问题的解决方案是在动态渲染完成后从视图中触发自定义事件并将 绑定$.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});
});
于 2014-03-13T14:45:21.750 回答