Backbone - 从View中完全更改模型,包括它的参考

时间:2017-03-15 14:31:47

标签: javascript backbone.js

我想知道是否可以完全更改模型,不仅是它的值,而且它是已经初始化的View的实际参考。我见过this question但它只是指模型值。

我创建了一个可重复使用的视图(呈现Google地图)并且它被其他不同的视图使用,而不是通过创建可重复使用的模块作为子视图,而是导航到显示全屏地图的URL,这是一个我的观点的实例。

这个地图View,接收一个初始化的模型,后来在这个视图中被修改,并且由于它是相同的模型引用,它还更新了调用(请求导航到)地图的视图模型,我正在调用所有视图来自我的路由器,它知道创建了哪些视图并保存对所有视图的引用,因此我可以通过这种方式在视图之间共享模型。

var myRouter= Backbone.Router.extend({
        routes : {"viewA(/)" : "invokeViewA"
        "viewA/map" : "invokeViewAMap"
        //... same with ViewB
        },
        //...
        invokeViewAMap : {
            if (mapViewInstance){
                //if the map already exists i want to update its model with the viewAinstance.model
            } else{
                 //there is no map view yet so let's create it and send the model i need updated later on
                 mapViewInstance = new AddressFinderMapView({model : viewAInstance.model});
            }
        },
        invokeViewBMap {
          //similar to the above but using viewBInstance's model
        }
    });
    
var AddressFinderMapView = Backbone.View.extend({
  //initialize function
  //render function
  //init google map
  events : {"click button" : "updateModelWithAddress"},
  updateModelWithAddress : function(){
    //Here is where i need to update the model values, of the model that this view has received, so far it works with the model that was sent on initialization
    this.model.set({
      //latitude and longitude from the map
    })
  }
});

其他想法:

  • 我可以停止重复使用这个地图视图实例并创建更多实例,但这样做只会打扰一次调用谷歌地图的目的,在一天结束时,地图用于选择一个位置并将其返回到视图它引用了它。
  • 我曾经从Map View触发了一个事件,所以其他视图会监听并更新自己的模型,但由于不同的视图可以同时存在,它会更新所有正在侦听的模型我想要的是什么
  • 我可以在触发器上发送当前路线以及纬度和经度,并让每个视图过滤它是否是必须更新的模型,但这更像是黑客而不是结构化解决方案。

1 个答案:

答案 0 :(得分:3)

只需将新模态分配给视图实例的model属性,例如:

viewInstance.model = newModelInstance;