我已经阅读了很多,Backbone没有做双向绑定,但我并不完全理解这个概念.
有人能给我一个例子,说明双向绑定如何在MVC代码库中运行,以及它如何与Backbone无关?
我有一个模型,它使用来自mysql数据库的JSON响应进行设置.模型数据使用true或false设置为数据库中的boolean/tinyint字段,该字段使用1或0.
在我看来,我有一个绑定,检查带有下划线的布尔值_.isBoolean.当然,当我的模型接收数据时,它被设置为1或者0不是true或false,并且_.isBoolean检查失败.
无论如何要么正确地让我的来自mysql的JSON响应是一个布尔值true或false值而不是1或者0,或者最好是有一种方法让我的模型在获取时(在视图呈现之前)自我更新true或者false基于它的1或0属性?
例如我的模型的数据看起来就像{"isChecked":"1"}我需要的那样{"isChecked":true}
非常感谢你提出的任何建议!
我之前在http://www.cbssports.com/nfl/scoreboard上查看分数,在检查代码后,我无法弄清楚他们如何更新分数.
我没有看到任何ajax调用,并且游戏似乎没有包含在iframe等中.
任何人都可以向我解释这是如何工作的?
我试图解决为什么下面的代码在包含括号时导致堆栈溢出的原因,但是当它们被省略时则不会.
我将函数本身作为setTimeout的参数调用,它在没有parantheses的情况下工作,但当我添加它们时当然会失败.在函数之后添加()是我的直觉.只希望有人可以为我解决这个问题.parans什么时候可选而不是?
情况1:
var a = 1;
function foo() {
a++;
document.write(a);
setTimeout(foo(), 2000)
}?
// RangeError: Maximum call stack size exceeded
Run Code Online (Sandbox Code Playgroud)
案例2:
var a = 1;
function foo() {
a++;
document.write(a);
setTimeout(foo, 2000)
}?
// parens are omitted on foo function and it works.
Run Code Online (Sandbox Code Playgroud) 我正在我的浏览器控制台中试验一些javascript,并且不确定为什么这不起作用.控制台和jsfiddle中的以下代码在我的尝试中抛出错误:Uncaught ReferenceError:foo未定义
foo = foo || {};
Run Code Online (Sandbox Code Playgroud)
我解释这个的方式是:如果全局对象的foo(在这种情况下是窗口)不存在,则将其创建为空对象.
或者,代码window.foo = window.foo || {}; 像我期望的那样工作.事先为foo分配值foo = 'bar'会使原始语句在之后运行时也能正常工作.
我理解自定义事件如何在Backbone中工作以及如何触发它们,但我很难理解何时使用它们以及它们直接调用函数的目的是什么.
例如
var MyView = Backbone.View.extend({
tagName: 'div',
className: 'myview',
initialize: function() {
this.model.on("mycustomevent", this.doSomething, this);
},
doSomething: function() {
console.log('you triggered a custom event');
}
});
Run Code Online (Sandbox Code Playgroud)
如果我没有弄错,可以通过this.model.trigger("mycustomevent")在其他方法中使用来调用doSomething 方法,但也可以直接调用this.doSomething()
在视图之外,可以类似地调用它
var myview = new MyView({model:somemodel});
myview.model.trigger("customevent");
myview.doSomething();
Run Code Online (Sandbox Code Playgroud)
我很困惑的是为什么不放弃自定义事件,只需在需要时直接调用方法?任何示例用途将不胜感激!