Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 那';这';嵌入文档中模型的变量?_Javascript_Node.js_Mongodb_Sails.js_Waterline - Fatal编程技术网

Javascript 那';这';嵌入文档中模型的变量?

Javascript 那';这';嵌入文档中模型的变量?,javascript,node.js,mongodb,sails.js,waterline,Javascript,Node.js,Mongodb,Sails.js,Waterline,我对node.js和sails有些陌生,但很简单,所以我喜欢:) 实际上,我正在使用sails框架0.10rc3和MongoDB ans sails mongo 我知道waterline的贡献者不太喜欢mongodb()模型中的嵌入式文档,但无论如何,我想知道'this'变量在模型中是如何工作的,以及如何检索内部数组中的当前元素 下面是一个模型示例(我们可以称之为ProjetSpan): module.exports={ 属性:{ 项目: { 型号:'Projet' }, 跨度: { 开始: {

我对node.js和sails有些陌生,但很简单,所以我喜欢:) 实际上,我正在使用sails框架0.10rc3和MongoDB ans sails mongo

我知道waterline的贡献者不太喜欢mongodb()模型中的嵌入式文档,但无论如何,我想知道'this'变量在模型中是如何工作的,以及如何检索内部数组中的当前元素

下面是一个模型示例(我们可以称之为ProjetSpan):

module.exports={
属性:{
项目:
{
型号:'Projet'
},
跨度:
{
开始:
{
键入:“日期时间”,
要求:正确,
日期时间:对,
before:function(){
如果(本项目结束<本项目结束)
把这个还给我。结束;
其他的
返回此.proj.end;
}
},
完:
{
键入:“日期时间”,
要求:正确,
日期时间:对,
之后:函数(){
如果(this.start>this.proj.start)
返回此文件。开始;
其他的
返回this.proj.start;
}
}
}
}
};
在这种情况下,“this”将如何工作?“this”是一个跨度(因此this.end可以工作,而不是this.proj.end)还是“this”是一个项目跨度(ans so this.proj.end可以工作,但不是this.end)


最后,如何使this.end(当前范围中的变量)和this.proj.end(当前文档关联中的变量)在此嵌入式上下文中工作?

Waterline完全不支持嵌入式文档,只提供
json
数据类型。因此,您的模型示例在Sails中不起作用,需要重写为:

module.exports = {

   attributes: {

    proj: {
        model:'projet'
    },

    spans: {
        type: 'json'
    },

    before: function() {

       if (this.spans.end < this.proj.end) {
          return this.spans.end;
       } else {
          return this.proj.end;
       }

    },

    after: function() {

       if (this.spans.start > this.proj.start) {
          return this.spans.start;
       } else {
          return this.proj.start;
       }

    }



}
module.exports={
属性:{
项目:{
型号:'projet'
},
跨度:{
键入:“json”
},
before:function(){
if(this.span.endthis.proj.start){
返回this.span.start;
}否则{
返回this.proj.start;
}
}
}
在实例方法中(如
before
before
before
这里),
this
引用整个实例对象。您需要通过检查来增强该代码,以确保
this.proj
是一个对象(即,它填充了
ProjetSpan.find({}.populate('project')
),而
this.span.end
this.span.start
实际上存在(因为水线没有验证嵌入的JSON)。

谢谢:)对于对象检查,我已经将
this.proj!=null&&typeof this.proj==='object'
,但是
span
呢?在这种状态下,它是对象、数组还是其他东西?“span”将是您设置为的任何JSON类型;很可能是一个对象或数组。不幸的是,它们都是
typeof
“object”,但您可以使用
sails.util.isArray()
来测试数组(
sails.util
.Cool thx:)!我根据建议更改了模型,但是在某些时候,深度关联测试呢?比如
if((this.projCollab!=null&&typeof this.projCollab=='object')&&(this.projCollab.proj!=null&&typeof this.projCollab.proj=='object'){if(this.end之前的
函数中返回this.end;否则返回this.projCollab.proj.end;}
?我知道我们现在不能使用I,我已经为此做了一些更改,但在像这样的情况下仍然需要它。。
module.exports = {

   attributes: {

    proj: {
        model:'projet'
    },

    spans: {
        type: 'json'
    },

    before: function() {

       if (this.spans.end < this.proj.end) {
          return this.spans.end;
       } else {
          return this.proj.end;
       }

    },

    after: function() {

       if (this.spans.start > this.proj.start) {
          return this.spans.start;
       } else {
          return this.proj.start;
       }

    }



}