当前位置: 首页 > 知识库问答 >
问题:

返回时未渲染主干集合

逄嘉禧
2023-03-14

我有一个骨干应用程序,我正在构建与Trigger.io,并有一点困惑,为什么当我单击手机工具栏中的后退按钮时,数据正在消失。

以下是设置:

我有一个视图SearchResultsView,看起来像这样(为了简洁起见删除了Trigger.io代码):

window.SearchResultsView = Backbone.View.extend({

initialize: function() {
    this.template = _.template($('#searchResultsView-template').html());
},

render: function() {

    var self = this;
    var renderedContent = this.template();
    $(this.el).html(renderedContent);

    if (window.resultsCollection) {
        self.drawList(window.resultsCollection);
    }

    return this;
},

events: {
    "click #submitQuery" : "processClick"
},

drawList: function(collection) {

        collection.each(function(place){
            window.console.log(place.get("name"));
            $("#resultsList").append("<li><a href='#locationdetail/"+place.id+"' class='link'>" + place.get("name") +"</a></li>");
        });
},

processClick: function() {

    var self=this;
    this.querystring = $("#searchBox").val(); //get the query

    window.resultsCollection = new Places(null, {query: this.querystring}); 
    window.resultsCollection.fetch(); //this is fetching via a call to the FourSquare API, and populating the models in the collection with that data

    window.resultsCollection.bind('reset', function(collection){
        self.drawList(collection);
    });
}

});

以下是模板:

<script type="text/template" id="searchResultsView-template">
<div id="searchbar"></div>
<h1>Results Bitch</h1>
    <input type="text" id="searchBox"></input>
    <input type="submit" id="submitQuery"></input>
    <ul data-role="listview" id="resultsList">
    </ul>
    <a href="locationdetail">Click me</a>
</script>

这是路由器:

searchresults: function() {
    this.searchresults = new SearchResultsView({});
    $('#container').empty();
    $('#container').append(this.searchresults.render().el);
},

它在实践中是这样工作的:当我最初加载页面时,没有结果列表(应该是这样)。我输入查询并执行搜索,然后它会回来,按照它应该的方式填充列表。然后,我会点击一个项目去另一个视图,当我点击“返回”时,列表又是空的。

我试图做的是测试集合是否仍然存在,如果仍然存在,继续重新呈现列表,但它永远不会呈现列表。集合确实存在,因为我能够将其记录到控制台并查看数据

我的怀疑是,目前还不可用,所以当它将结果附加到它时,它找不到它,因此没有显示任何内容。

所以:

  • 这听起来对吗

希望我足够清楚。我没有包括模型和收藏,以保持简短。如果这些有帮助,我很乐意包含它们(尽管,我倾向于认为这是一个观点问题)。

谢谢

共有1个答案

诸葛砚文
2023-03-14

问题是在调用方法中附加呈现的视图的方式。

在下面的路由器方法

searchresults: function() {
        this.searchresults = new SearchResultsView({});
        $('#container').empty();
        $('#container').append(this.searchresults.render().el);
    },

您应该首先将初始化视图的el附加到父视图中的元素,然后呈现它。

这是必要的,因为有时子视图可能会在它自己创建并附加的html中搜索html元素(如您的情况)。如果在渲染之前未附加视图,则在渲染时创建的html实际上不会成为窗口的一部分。文档,因此不可搜索(仅在内存中)。

在您的例子中,您正在尝试搜索尚未成为窗口一部分的元素。文件

 var SearchResultsView = Backbone.View.extend({
    ...
        drawList: function(collection) {
                collection.each(function(place) {
                    window.console.log(place.get("name")); // this proves the collection is still here. But, it's not rendering? Because the DOM isn't finished rendering yet?
                    $("ul#resultsList").append("<li><a href='#locationdetail/" + place.id + "' class='link'>" + place.get("name") + "</a></li>");
                });
            },
...
});

下面的更改应该可以解决这个问题。

 searchresults: function() {
                this.searchresults = new SearchResultsView({});
                $('#container').empty();
                $('#container').append(this.searchresults.el);
                this.searchresults.render();
            },

SearchResultsView的el现在是窗口的一部分。文件在视图中创建和附加的任何html也是窗口的一部分。文档和可搜索。

下面是我根据您的代码编写的带有主干代码的示例工作html文件。

http://jsfiddle.net/venkat_kotra/rHWPL/

 类似资料:
  • 我用脊梁骨。js 我试图从服务器获取我的数据,但它不起作用 (服务器发送json对象) 我搜索了但没有回应 我的代码哪里不正确?

  • 下面的LWJGL代码将在屏幕中心呈现一个蓝色正方形。相反,我得到了一个空白的白色屏幕。就像渲染根本不工作,或者我在屏幕外渲染。 我是OpenGL和LWJGL的新手,所以我力不从心。我浏览了所有内容,但似乎找不到任何可能与代码有关的问题。 OpenGLTest.scala VertexArray.scala

  • 我正在向我的主干集合中添加一个项目,如下所示: 我在MyCollection中覆盖了同步,如下所示: 但是,似乎在add之后不会调用sync,add成功执行并触发“add”事件。我错过什么了吗?还是这是正确的行为?

  • 问题内容: 渲染模板后如何运行方法?我要设置和之后,我需要使用JQuery进行更改(例如,在模板内容的DOM中)。正在“之前”渲染工作(模板的DOM尚不可用)。谢谢。 问题答案: 创建在链接函数中运行代码的指令。构建模板后,将调用链接功能。 请参阅ng-click以获取想法。

  • 问题内容: 我在React中有一个要在index.js中导入的组件,但是它给出了这个错误: 渲染未返回任何内容。这通常意味着缺少return语句。或者,不渲染任何内容,则返回null index.js: 零件: 问题答案: 我在 render() 方法中遇到了同样的问题。当您从 render() 返回时出现问题: 即如果您在新行中开始括号 尝试使用: 这样可以解决错误

  • 下面是我用(FacetModels)填充我的收藏的内容 如何访问可用值[]数组 “FacetModels”:[{“FacetDisplayLabel”:null,“SelectedValues”:[],“AvailableValues”:[],“UnknownResults”:0,“ActionURI”:null,“FacetGroupName”:“Category”,“FacetGroupFri