- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用主干库执行以下操作:
var Persons = Backbone.Collection.extend({
defaults: {
name: 'unknown',
age: 18
},
over_18: function () {
return this.filter(function (model) {
return model.get('age') > 18
});
},
under_18: function () {
var persons_over_18 = this.over_18;
return this.without(this, persons_over_18); // it does not work!! why?
}
});
persons = new Persons([{age: 17}, {age: 27}, {age:31} ]);
persons.under_18().length; // 3 instead of 1
如您所见,under_18
方法无法正常工作,因为它返回了所有模型而不是只给我年龄属性低于 18 岁的模型。
所以为了调试我的代码,我决定查看 Backbone.js Annotated Source ,特别是以下代码:
var methods = ['forEach', 'each', 'map', 'collect', 'reduce', 'foldl', ... ]; // and more
_.each(methods, function(method) {
Collection.prototype[method] = function() {
var args = slice.call(arguments);
args.unshift(this.models);
return _[method].apply(_, args);
};
});
但是上面这段代码我不是很清楚,我仍然无法让第一个代码如我所愿。
所以我的问题是如何修复与第二个代码相关的第一个代码?
这是我在 jsfiddle.net 中的代码 http://jsfiddle.net/tVmTM/176/
最佳答案
为了更好地理解 Backbone 代码的冗长回答:
在 javascript 中,可以通过两种方式引用对象的“成员”:
.
表示法:foo.say('hello');
[...]
表示法,以字符串作为参数...有点像关联数组:foo["say"]('你好')
backbone 中发生的事情是 methods
数组中的每个字符串,就在这个方法之上定义,被迭代并添加到 Collection
原型(prototype)中,因此添加到所有类中继承(或扩展)Collection
。
在函数中,arguments
关键字简单地引用传递给函数的所有参数,即使签名为空也是如此:
Collection.prototype[method] = function() { // <- empty signature here!
没有参数的切片会将传递的参数转换为数组。注意此处使用了 slice.call(...)
(并引用 this SO question)。
var args = slice.call(arguments);
unshift
然后将集合模型数组添加到数组的开头。
args.unshift(this.models);
然后我们实际上在新的参数数组上调用 Underscore 方法(使用 [...]
表示法)。使用 apply,我们将 _
作为第一个参数传递给 this
作用域(更多信息 here)
return _[method].apply(_, args);
这允许您执行以下操作:
MyCollection.each(function (model) { ... });
代替
_.each(MyCollection.models, function (model) { ... });
产生的效果相同!前者只会调用后者。 :)
要回答你的问题,你的问题是 _.without
方法不接受两个数组,而是一个数组后跟一个参数列表;您正在寻找的方法称为 difference
(查看 this SO question ),但它未映射到集合中,因此您可以自己映射它(复制在 Backbone 源中找到的代码)或直接使用即可:
return _.difference(this.models, this.over_18());
工作 fiddle :http://jsfiddle.net/tVmTM/177/
在我看来,最好继续使用 filter
,就像您对 over_18
方法所做的那样...更好的是,将 over_18
和under_18
作为模型中的方法(它们所属的地方)和集合中的方法只使用它们。
关于javascript - 混合每个 Underscore 方法作为 Collection#models 的代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21165516/
我对 mongoosejs 中模型的使用感到有些困惑。 可以通过这些方式使用 mongoose 创建模型 使用 Mongoose var mongoose = require('mongoose');
我正在看 from django.db import models class Publisher(models.Model): name = models.CharField(max_len
我有自己的 html 帮助器扩展,我用这种方式 model.Reason_ID, Register.PurchaseReason) %> 这样声明的。 public static MvcHtmlS
假设模型原本是存储在CPU上的,然后我想把它移到GPU0上,那么我可以这样做: device = torch.device('cuda:0') model = model.to(device) # o
我过去读过一些关于模型的 MVC 建议,指出不应为域和 View 重用相同的模型对象;但我找不到任何人愿意讨论为什么这很糟糕。 我认为创建两个单独的模型 - 一个用于域,一个用于 View - 然后在
我正在使用pytorch构建一个像VGG16这样的简单模型,并且我已经重载了函数forward在我的模型中。 我发现每个人都倾向于使用 model(input)得到输出而不是 model.forwar
tf.keras API 中的 models 是否多余?对于某些情况,即使不使用 models,代码也能正常运行。 keras.models.sequential 和 keras.sequential
当我尝试使用 docker 镜像运行 docker 容器时遇到问题:tensorflow/serving。 我运行命令: docker run --name=tf_serving -it tensor
我有一个模型,我用管道注册了它: register_step = PythonScriptStep(name = "Register Model",
如果 View 需要访问模型中的数据,您是否认为 Controller 应: a)将模型传递给 View b)将模型的数据传递给 View c)都不;这不应该是 Controller 所关心的。让 V
我正在寻找一个可以在模型中定义的字段,该字段本质上是一个列表,因为它将用于存储多个字符串值。显然CharField不能使用。 最佳答案 您正在描述一种多对一的关系。这应该通过一个额外的 Model 进
我最近了解了 Django 中的模型继承。我使用很棒的包 django-model-utils 取得了巨大的成功。我继承自 TimeStampedModel 和 SoftDeletableModel。
我正在使用基于 resnet50 的双输出模型进行项目。一个输出用于回归任务,第二个输出用于分类任务。 我的主要问题是关于模型评估。在训练期间,我在验证集的两个输出上都取得了不错的结果: - 综合损失
我是keras的新手。现在,我将使用我使用 model.fit_generator 训练的模型来预测测试图像组。我可以使用 model.predict 吗?不确定如何使用model.predict_g
在 MVC 应用程序中,我加入了多个表并将其从 Controller 返回到 View,如下所示: | EmployeeID | ControlID | DoorAddress | DoorID |
我在使用 sails-cassandra 连接系统的 Sails 中有一个 Data 模型。数据。 Data.count({...}).exec() 返回 1,但 Data.find({...}).e
我正在使用 PrimeFaces dataTable 开发一个 jsf 页面来显示用户列表。用户存储在 Model.User 类的对象中。
我正在关注https://www.tensorflow.org/tutorials/keras/basic_classification解决 Kaggle 挑战。 但是,我不明白应该将什么样的数据输入
我是这个领域的新手。那么,你们能帮忙如何为 CNN 创建 .config 文件吗? 传递有关如何执行此操作的文档或教程将对我有很大帮助。谢谢大家。 最佳答案 这个问题对我来说没有多大意义,因为 .co
我是“物理系统建模”主题的新手。我阅读了一些基础文献,并在 Modelica 和 Simulink/Simscape 中做了一些教程。我想问你,如果我对以下内容理解正确: 符号操作是将微分代数方程组(
我是一名优秀的程序员,十分优秀!