【问题标题】:Retrieving Specific Data From JSON Using a Backbone Model使用主干模型从 JSON 中检索特定数据
【发布时间】:2011-08-05 14:20:56
【问题描述】:

我正在创建应用程序的客户端视图,我需要帮助来从我的 JSON 文件中检索特定数据。我正在使用 Backbone.js 和 Underscore.js 来实现这一点。

(function($) {

      window.Node = Backbone.Model.extend({
         getName:    function(){
             return this.get('Name');
         } 
     });

      window.Nodes = Backbone.Collection.extend({
         model:Node,
          url: '/packageview.json'
    });

  window.NodeView = Backbone.View.extend({

    tagName: "div",

    className: "package-template",

    events:{

      "click #display-name"       :    "displayname",         
    },

    //.. I have a render and initialize function here which should not be a concern


    displayname: function(){
      var node = new Node();
      alert(node.getName());  //trying to alert
    },

  });
});

我正在尝试从模型中获取名称并提醒它。我的 html 中有一个带有 id 的按钮,当我按下该按钮时,我得到“未定义”作为警报。这是我的 JSON 文件的外观:

{
  "Id": 2,
  "Name": "Some Package",
  "IsComplete": false,
  "IsNodeTagComplete": false
}

我想我在某个地方犯了一个愚蠢的错误。我是否对模型有很多期待?

【问题讨论】:

  • 如果不查看代码的其他部分,真的很难找出问题所在。我知道这很简单,但你有很多外部依赖项来帮助我们调试。您能否简化上述内容或添加相关的 HTML/Backbone 代码?例如。包视图节点或正在单击的节点是什么或nodeinstance 定义在哪里?
  • 快速提问:为什么不直接使用model.get('Name')?而不是有一个明确的吸气剂?只是好奇。至于您的 JSON 文件,您不是用数据创建模型……只是一个空模型。你一定会得到未定义的......
  • @Nupul:我想我应该删除渲染和初始化函数。也许这会简化代码并且可以更好地理解。
  • @Nupul:它也不起作用。它的应用真的很复杂。我需要了解 getter 和 setter 是如何工作的,因为我会经常使用它们。

标签: javascript jquery backbone.js underscore.js


【解决方案1】:

我在这里做的是这个

 window.jsonAccess = Node.extend({ // Here Node is my above mentioned model

    getJSON: function(){
        var collection = nodeInstance.toJSON(); // nodeInstance is an instance of my collection Nodes
        return collection; //returns JSON
    }
});
jAccess = new jsonAccess();

这就是我访问 JSON 所做的工作

 getNodeId: function(){ //Function to get Node Id from JSON
        objectJSON = jAccess.getJSON(); // Get JSON 
        _.each(objectJSON, function(action){
            _.each(action.Nodes, function(action){

这解决了我的目的,但并不完全是在主干中使用 getter 的方式。

【讨论】:

    【解决方案2】:

    由于缺少很多上下文,我也可能犯了一个错误,但这是我的猜测 - 您正在创建一个空节点模型。尝试在显示中做这样的事情:

    displayName: function() {
    
       var myJSON = window.getJSONObject(); //wherever your json object is or how to get it...
       var node = new Node({
       id:myJSON.Id,
       name:myJSON.Name,
       isComplete: myJSON.IsComplete,
       ...
       });
    
       alert(node.get('name'));
       alert("Getter: "+node.getName()); //your version...
    }
    

    这只是一种预感......也许我错过了你的上下文,但现在似乎是这种情况......

    【讨论】:

    • @Nupul.. 我找到了另一种方法.. 这里不完全使用吸气剂。
    • @Eric:你不应该让问题悬而未决。如果您确实找到了另一种解决方法,那对于偶然发现这篇文章的人来说会很棒:)
    • 我知道,但我这样做的方式与我提出的问题无关。我仍然没有弄清楚在我的情况下使用吸气剂,所以这个问题没有解决。
    • Err...你看过小提琴的例子和我能让吸气剂工作的事实吗?你能告诉我们什么是未解决的吗? Backbone 内置了 getter/setter,您不需要拥有自己的。可以直接使用model.get('propertyName') 或者model.set({prop1:val1, prop2:val2,...}) 还是不行是什么?我们应该能够解决问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 2012-08-03
    • 2013-01-04
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 2020-04-08
    相关资源
    最近更新 更多