从路由器传递参数到骨干js中查看

时间:2014-08-07 02:19:28

标签: javascript backbone.js

我在获取从骨干路由器传递到视图渲染功能的值时遇到了一些问题。

我的路由器中有一个功能:

routes: {
   "content/:contentTypeTitleID/:contentTypeID/:pageLink" : "contentAction",
}

app_router.on('route:contentAction', function(contentTypeTitleID, contentTypeID, pageLink){
    if(window.currentSection){
        window.currentSection.remove();
    }
    window.currentSection = new ContainerContent({titleID :contentTypeTitleID, typeID : contentTypeID, pl : pageLink});

    $("#webbodycontainer").html(window.currentSection.$el);
    window.currentSection.render();
});

观点:

initialize : function(options){
   console.log(this.options.typeID);
   console.log(this.options.titleID);
   console.log(this.options.pl);
},
render : function(){
   console.log(this.options.typeID);
   console.log(this.options.titleID);
   console.log(this.options.pl);
}

网址如下:#content / 7901c296-071d-e411-90ef-0050568726db / ed05829f-071d-e401-93ef-0050568726db / 1

console.log()方法中的

initialize没问题,但我在Uncaught TypeError: Cannot read property 'typeID' of undefined

中收到错误render()

知道可能导致这种情况的原因。感谢。

更新

以下是视图的render方法中的完整代码:

render : function(){
  var _contenttem = _.template(Content);
  this.$el.append(_contenttem);

  var _content = new Content();
  var pageLink = this.options.pl;

  if(pageLink != 1){
    $("#contentDiv").html("write anything");
  }else{
    $("#contentDiv").html(_content.getContent(this.options.typeID));
  }
  $(".navigator").html(_content.writeContentType(this.options.titleID));

  $(".contentType").click(function(event){
    $('.navigator li').removeClass('active');
    $(this).addClass('active');

    if(pageLink != 1){
        $("#contentDiv").html("write anything");
    }else{
        console.log(this.options.typeID);
        console.log(this.options.titleID);
        console.log(this.options.pl);
    }
  });
}

1 个答案:

答案 0 :(得分:0)

看起来你并没有按照预期的方式将它附在dom上。以下是根据您显示的代码在渲染方法中显示this.options的示例。

小提琴: http://jsfiddle.net/mcfarljw/zwesbhbp/

而不是使用:

$("#webbodycontainer").html(window.currentSection.$el);

您应该使用:

currentSection.setElement("#webbodycontainer").render();