【问题标题】:How to access attributes in sails.js model with javascript?如何使用 javascript 访问sails.js 模型中的属性?
【发布时间】:2016-05-11 09:03:39
【问题描述】:

我想在我的编辑视图中访问一些属性来更改一些值。

我尝试使用<%=course.scoreAlgo=> 之类的方式进行访问,但这不起作用。

我似乎无法访问模型中script 标记内的任何属性。非常感谢任何和所有帮助我如何访问它!

课程模型:

module.exports = {

  attributes: {
    code:{
      type: "string"
    },

    name:{
      type: "string"
    },

    recitations:{
      type: 'array',
      defaultsTo: 0
    },

    finishedAssignments:{
      type: "array"
    },

    recitationScore:{
      type: 'integer',
      defaultsTo: 0
    },

    recitationGroup:{
      type: "string",
      defaultsTo: "none"
    },

    shown:{
      type: "string",
      defaultsTo: "no"
    },

    scoreAlgo:{
      type:"array"
    },

    takes:{
      model: 'student'
    }
  }
};

这就是我试图制作的代码的样子:

<form action="/course/update/<%= course.id %>" method="POST">
  <h2>Edit course</h2>
  <input value="<%= course.code%>" type="text" name="code"><br/>
  <input value="<%= course.name%>" type="text" name="name"><br/>
  <input value="<%= course.shown %>" type="text" name="shown"><br/>
  <input value="<%= course.recitationScore%>" type="text" name="recitationScore"><br/>
  <p>Score algo, specify by saying how many have to be completed for each "subgroup".
    If two from a, two from b and one from c means full score, put "2,2,1"</p>
  <input value="<%=course.scoreAlgo%>" type="text" name="scoreAlgo">
  <input type="button" value="Calculate recitationScore" onclick="calcScore()">
  <script>
    function calcScore(){
      var stringArray = course.finishedAssignments;
      var scoreAlgo = course.scoreAlgo;
      for(var i=0; i < stringArray.length; i++){
        var str = stringArray[i];
        var sStr = str.split(",");
        for(var j=0; j < sStr.length; j++){
          var count = scoreAlgo[i]
          var s = sStr[i];
          var sS = s.split((i+1).toString);
          if(sS.length >= count){
            var score = sS.length*33;
            course.recitationScore = course.recitationScore + score;
            console.log(score);
          }
        }
      }
    }
  </script>
  <input type="submit" value="Edit course"/>
</form>

【问题讨论】:

    标签: javascript node.js model sails.js


    【解决方案1】:

    您传递给 .ejs 并希望显示的所有值都需要用 &lt;%= %&gt;&lt;%- %&gt; 包装,即使在 &lt;script&gt;&lt;/script&gt; 中也是如此

    function calcScore(){
      var stringArray = <%= course.finishedAssignments %>;
      var scoreAlgo = <%= course.scoreAlgo %>;
      for(var i=0; i < stringArray.length; i++){
        var str = stringArray[i];
        var sStr = str.split(",");
        for(var j=0; j < sStr.length; j++){
          var count = scoreAlgo[i]
          var s = sStr[i];
          var sS = s.split((i+1).toString);
          if(sS.length >= count){
            var score = sS.length*33;
           //course.recitationScore = course.recitationScore + score; <!- not sure what should it do
            console.log(score);
          }
        }
      }
    }
    

    【讨论】:

    • 但是如果我将属性放在&lt;%=%&gt; then the variables aren't defined. It then says stringArray 变量中,例如可能不会定义`。您评论的最后一点是假设将 sS 的 len 乘以 33 添加到背诵分数。猜猜我能做到course.recitationScore+= len*33
    • 好的.. 因为这些是数组,您需要将它们更改为 JSON。 你不能在这样的视图中更新模型。您不能将课程用作 javascript 参数。如果你真的需要它,你可以这样做: var course = ;
    • 好的,谢谢。所以我不能像那样更新模型属性。好吧,这很糟糕,以为这样很容易:)
    • 不。您需要将数据发布到模型/控制器/蓝图以进行更新。
    • 好的,谢谢你的帮助。这一切似乎都是一项艰巨的工作。我能做些什么来使它更容易/更简单?
    猜你喜欢
    • 2014-04-27
    • 1970-01-01
    • 2012-03-10
    • 2019-05-17
    • 1970-01-01
    • 2020-05-07
    • 2011-11-29
    • 2013-04-28
    • 2015-08-02
    相关资源
    最近更新 更多