我有一个骨干应用程序,我正在构建与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);
},
它在实践中是这样工作的:当我最初加载页面时,没有结果列表(应该是这样)。我输入查询并执行搜索,然后它会回来,按照它应该的方式填充列表。然后,我会点击一个项目去另一个视图,当我点击“返回”时,列表又是空的。
我试图做的是测试集合是否仍然存在,如果仍然存在,继续重新呈现列表,但它永远不会呈现列表。集合确实存在,因为我能够将其记录到控制台并查看数据。
我的怀疑是,目前还不可用,所以当它将结果附加到它时,它找不到它,因此没有显示任何内容。
所以:
希望我足够清楚。我没有包括模型和收藏,以保持简短。如果这些有帮助,我很乐意包含它们(尽管,我倾向于认为这是一个观点问题)。
谢谢
问题是在调用方法中附加呈现的视图的方式。
在下面的路由器方法中
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对象) 我搜索了但没有回应 我的代码哪里不正确?
我正在向我的主干集合中添加一个项目,如下所示: 我在MyCollection中覆盖了同步,如下所示: 但是,似乎在add之后不会调用sync,add成功执行并触发“add”事件。我错过什么了吗?还是这是正确的行为?
下面的LWJGL代码将在屏幕中心呈现一个蓝色正方形。相反,我得到了一个空白的白色屏幕。就像渲染根本不工作,或者我在屏幕外渲染。 我是OpenGL和LWJGL的新手,所以我力不从心。我浏览了所有内容,但似乎找不到任何可能与代码有关的问题。 OpenGLTest.scala VertexArray.scala
问题内容: 渲染模板后如何运行方法?我要设置和之后,我需要使用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