草庐IT

javascript - 主干模型 - 根据 REST 操作更改 URL 查询参数

在Backbone模型中,我们有url和urlRoot属性:url:function(){return'/jobs'},urlRoot:function(){return'/jobs'},但是我想向url添加参数或查询参数,具体取决于它是GET、POST、PUT、DELETE等请求的类型。所以我想做这样的事情:url:function(type,opts){//typeandoptsargumentsarenotavailableinBackbone,Ijustmadethemupforthisexamplevarurl='/jobs';switch(type){case'GET':b

javascript - 主干 - 除了一个属性之外,是否可以将更改事件绑定(bind)到模型?

我希望在我更改模型的任何属性时触发一个更改事件,除了一个。这可能吗?除了做:model.bind('change:prop1',func);model.bind('change:prop2',func);model.bind('change:prop3',func);etc....或者,是否有办法从事件处理程序中找出哪个属性触发了更改? 最佳答案 您可以使用model.bind('change',function(){/*...*/})并在函数中使用hasChanged检查属性:if(model.hasChanged('propIW

javascript - 如何调用父主干同步方法

在我的应用程序中,我按如下方式覆盖了Backbone.sync:Backbone.sync=function(method,model,options){//Somecustomcode//THISFAILS.Backbone.prototype.sync.call(this,method,model,options);}}我的问题是,如何调用原始同步方法?我需要改用this.sync吗? 最佳答案 据我了解,Backbone.sync检查是否存在本地定义的同步版本,并在调用全局Backbone.sync之前调用它:(this.sy

javascript - 具有多个参数的主干路由器

我需要让它工作:routes:{':product':'showProduct',':product/:detail':'showProductDetail'showProductDetail在设置':product'路由时永远不会被调用,即使它是在之后设置的。我尝试了以下routes:{':product(/:detail)':showProductOrDetail}但是当只有第二个参数改变时,这不会被调用。重要的是我有产品本身或url中的产品和详细信息。有人知道如何解决这个问题吗? 最佳答案 您的问题有一个小技巧。我觉得有更好的

javascript - View 上的主干重新绑定(bind)事件

我有两种观点,一种代表客户的观点,另一种是个别客户的观点。我在客户端View中绑定(bind)mouseenter和mouseleave事件以淡入和淡出图像上的叠加层。单独使用时效果很好。但是,我还使用jQuery插件来实现轮播效果(插件here)。启用后,我的自定义事件将不再有效。插件初始化后,有什么方法可以委托(delegate)ClientView事件吗?这是我第一次使用Backbone,所以我也可能做错了其他事情。代码如下://ClientViewwindow.ClientView=Backbone.View.extend({tagName:'li',template:_.te

javascript - 保存模型时更新主干 View

我有以下场景-window.Wine=Backbone.Model.extend({urlRoot:'/wines'});window.WineCollection=Backbone.Collection.extend({model:Wine,url:"/wines"});我有一个模型和定义的相应集合。window.WineListView=Backbone.View.extend({el:'#wineList',initialize:function(){this.model.bind("reset",this.render,this);this.model.bind("add",f

javascript - 主干 View 无法使用 requirejs 扩展

我熟悉构建主干应用程序,但我正在尝试将其转换为使用requirejs,我面临的问题是当我尝试扩展父View时,它是undefined当尝试将base-view.js扩展到properties-view.js时define(['backbone','underscore','jquery','views/node/base-view'],function(Backbone,_,$,NodeBaseView){PropertiesView=NodeBaseView.extend({});}});在父基础View中实例化一个subviewdefine(['backbone','undersc

javascript - 主干 View 嵌套

我在原地转圈,似乎在我当前实现backbone.js的应用程序中遗漏了一些东西。问题是我有一个主AppView,它为页面初始化各种subview(图形、信息表等)。我的愿望是能够根据导航时传递的参数标志更改页面布局。我遇到的情况是,subview引用了模板呈现后的dom元素,但在主AppView初始化过程中无法访问这些元素。因此,主要问题是如何确保为每个事件绑定(bind)过程设置正确的dom元素以正确设置?使用以下代码,如果我有一个事件绑定(bind)到我的LayoutView中的模型更改,则会呈现布局,但后续View不会正确呈现。我摆弄过的一些东西是将所有View“.el”值设置为

javascript - 我无法测试在主干 View 中呈现的元素的可见性

我正在开发一个Backbone.js应用程序,同时使用Jasmine&Sinon添加测试我在确定某些DOM元素的可见性时遇到了问题:其中一些在测试中被检测为不可见,而我可以在我的应用程序中正确地看到它们。我创建了一个复制问题的小示例,同一测试在两组元素上运行两次:第一组直接存在于SpecRunner.html中第二个已呈现为BackboneView测试本身使用jQuery.is(':visible')(通过jasmine-jquery的.toBeVisible())来了解元素是否可见。它通过了第一组,而不是第二组。我在这里将代码作为github项目共享:https://github.c

javascript - 具有 RequireJS : anti-pattern? 的单例主干模型

我有一个模型需要被多个View访问,为了在模型模块的定义中完成这个,我立即像这样实例化它:define(['jquery','underscore','backbone'],function(_,Backbone){varFoo=Backbone.Model.extend({//wondrousmethodsandproperties});returnnewFoo();});我真的只需要这个模型的一个实例——现在就是这样。据我所知,解决方法是有一个单独的App模块。像这样的东西:define([],function(){varApp={routers:{},models:{},view