- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何仅在 View 获取所有数据后才将模型传递给 View ?我有一个名为 Messages 的模型,它获取包含 100 个消息对象的数组。我想将其传递给我的 View 进行渲染,但是当我传递它们时什么也没有发生,因为我的模型尚未完成获取所有消息的操作。我该怎么做?
app.js
$(document).ready(function() {
messages = new Messages();
messagesView = new MessagesView({model: messages});
});
messagesView.js
var MessagesView = Backbone.View.extend({
initiaize: function() {
console.log('works');
},
sanitizeHtml: function(html) {
if (html === null) {
return 'null';
} else if (html === undefined) {
return 'undefined';
}
var result = "";
for (var i = 0;i < html.length;i++) {
switch (html[i]) {
case ">":
result += ">";
break;
case "<":
result += "<";
break;
default:
result += html[i];
break;
}
}
return result;
},
getUserName: function(){
var name = 'username'.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
},
renderFriends: function(){
$('#friends-list').empty();
_.each(this.friends, function(friend) {
$('#friends-list').append('<li>' + friend + '</li>');
});
},
renderMessages: function() {
var context = this;
$('#msg-log').text('');
_.each(this.model.get('data').results, function(msg) {
var text = context.sanitizeHtml(msg.text);
var username = context.sanitizeHtml(msg.username);
if (msg.room === context.model.roomName) {
var url = $("<a class='link' href='' data-name='" + username + "'>" + username + "</a>");
$('#msg-log').append(url);
if (_.contains(context.model.friends, username)) {
$('#msg-log').append($("<span><b>: " + text.substring(0, 44) + "</b></span>"));
} else {
$('#msg-log').append($("<span>: " + text.substring(0, 44) + "</span>"));
}
$('#msg-log').append('<br>');
}
});
},
});
messagesModel.js
var Messages = Backbone.Model.extend({
initialize: function() {
setEventListeners();
this.set('friends', []);
this.set('data', []);
this.set('roomName', undefined);
this.fetch();
},
send: function(message){
$.ajax({
url: 'https://api.parse.com/1/classes/chatterbox',
type: 'POST',
data: JSON.stringify({
text: message,
username: this.getUserName(),
room: this.get('roomName')
}),
});
},
fetch: function(){
var context = this;
$.ajax({
url: 'https://api.parse.com/1/classes/chatterbox',
type: 'GET',
data: {
limit: 14,
order: '-createdAt'
},
success: function(data) {context.set('data', data) }
});
},
});
最佳答案
从逻辑上讲,如果您有 100 条消息,那么通过模型获取它是完全错误的。
主干模型是一个单一的实体,可以被视为类似于数据库表中的一行。
例如消息模型应该将数据库表的列作为其属性,并且模型的实例精确映射到表中的一行。
您实际上尝试使用上面的 ajax 调用获取的是消息数量,为此您应该使用 Backbone Collection。主干集合包含许多模型。
因此,在您的情况下,您的消息主干集合将包含您尝试获取的 100 条消息。
使用collection的fetch方法从后端获取你的消息。
为了在获取数据后渲染 View ,您可以为主干集合的“重置”事件定义一个事件监听器。
永远记住,要从表中获取行列表,请使用集合。
模型类似于数据库表中的单独行。
关于javascript - 如何仅在获取所有数据后才将模型传递给 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28567270/
在 Javascript 中,我有一个对象集合,我将其值存储在变量中 var filters = { BeginDate: $("#BeginDateRange").val(), En
只有在传递了 X 个字符的情况下,我才想将“显示更多”链接(如果单击将显示已 trim/隐藏的内容)附加到我的段落。 例如,我将最小字符数设置为 120 个字符,而该段落只有 60 个字符,因此我不需
大多数 tar 文件解压缩到它们自己的子文件夹中(因为编写开源实用程序的人都是了不起的人)。 一些提取到我的 cwd 中,这使一切变得困惑。我知道有一种方法可以查看 tar 中的内容,但我想编写一个
我有一个固定的侧边栏,只有在有足够的垂直空间可用时,我才想将一个 div 粘贴到它的底部。 如果没有足够的垂直空间,固定的 div 不应与前一个元素重叠,而应该顺流并生成一个滚动条。 有什么想法吗?
我有以下 csv 文件,file.csv: 1,yes,yes,customer1 2,no,yes,customer5 3,yes,yes,customer11 4,no,no,customer14
给定一个数据框 df 如下: id value1 value2 value3 0 0 22 1 7 1 1 0 0
我尝试将一个 div 放入另一个 div 中,使用他的子元素作为应激活可放置的区域。 为了让事情更清楚,我们假设我们有#parent_div、#child_div 和#droppable。我想将 #p
我是一名优秀的程序员,十分优秀!