我有一个拥有Facebook权限的数组,以及用户应该给出的权限数组:
window.FB.api('/me/permissions', function(perm){
if(perm){
var given_permissions = _.keys(perm['data'][0];
var needed_permissions = ["publish_stream", "email"];
//now check if given permissions contains needed permissions
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想比较,如果所有的needed_permissions都在given_permissions,在下划线精明的方式(不包括循环两个数组我和比较值).我看到了一个_.include方法,但这会将数组与值进行比较.如果所有权限都可用,我想返回true,否则返回false.如果可能的话,我正在寻找一个不错的单线电话.
原因是,FB.login即使用户选择取消扩展权限,也会返回true.所以我需要仔细检查一下.
我在Backbone中使用更改事件发现了一些奇怪的东西.这是一个模型,它有一个数组作为属性.如果我让属性在内部推送一个新值并将其设置回模型,则不会触发change事件...
这是一个完整记录的例子:
var TestModel = Backbone.Model.extend({
defaults : {
numbers : []
},
initialize : function() {
this.on('change:numbers', this.changedEvent);
},
changedEvent : function() {
console.log('model has changed');
}
});
var oTestModel = new TestModel();
oTestModel.set('numbers', [2, 3, 4]); // change:numbers Event is fired
var aNumbers = oTestModel.get('numbers');
aNumbers.push(5);
oTestModel.set('numbers', aNumbers); // change:numbers event is NOT fired BUT WHY???
// oTestModel.set('numbers', [2, 3, 4]);
// If this line is not commented out change:numbers event is also fired
console.log(oTestModel.toJSON()); // Dumps out …Run Code Online (Sandbox Code Playgroud) 我有这个模型默认值:
test.Models.ItemModel = Backbone.Model.extend({
defaults: {
name: 'an item',
units: []
},
Run Code Online (Sandbox Code Playgroud)
然后我使用以下代码来设置模型:
addUnit: function(e){
if(e.keyCode == 13){
this.model.set({ 'units' : this.model.get('units').push($('#addUnit').val()) },
{success: function(){
this.render();
}}
);
}
},
Run Code Online (Sandbox Code Playgroud)
但是,它似乎永远不会被添加到Model数组中,我在这里做事吗?