2016-08-31 86 views
0

我有2个XML视图。在第一个是输入字段和按钮导航到第二个视图。第二个视图是表。当我按第一个视图中的按钮时,我将过滤器参数推送到第二个视图,并使用beforeRebindTable应用过滤器。在第二个视图中,我有按钮导航回第一个视图。但是,当我在输入字段中更改值时,不会发送新的查询。它只是导航到第二个视图。如何在不重新加载页面的情况下重置事件?

所以我的问题是,我如何重置或刷新按钮事件,以便我可以发送新的查询而无需重新加载页面?

这是我在第一个视图中按钮的事件。

navToSecond : function (oEvent){ 
     var oModel = new sap.ui.model.json.JSONModel(); 
     oModel.setProperty("/First", this.getView().byId("inp").getValue()); 
     sap.ui.getCore().setModel(oModel, "Filter"); 
     this.getRouter().navTo("second"); 
+0

也许你可以在navTo之前调用oModel.refresh? – slkorolev

+0

感谢您回复@slkorolev。但我试图像oModel.refresh(true),但它没有改变任何东西。在更改输入值后,不会创建新的查询。 –

回答

0

您设置您的属性,然后将其存储为“过滤器”模型。所以改变事件提前开了,迷路了。但为什么你在每一回合都创建一个新模型?

navToSecond : function (oEvent){ 
    var oModel = sap.ui.getCore().getModel(oModel, "Filter"); 
    if (!oModel) { 
     oModel = new sap.ui.model.json.JSONModel(); 
     sap.ui.getCore().setModel(oModel, "Filter"); 
    } 
    oModel.setProperty("/First", this.getView().byId("inp").getValue()); 
    this.getRouter().navTo("second"); 
    } 
+0

您好Markus我认为问题在于我在第二视图onBeforeRebindTable方法中使用了全局模型,然后推送过滤器。所以也许有另一种方法可以解决这个问题,我真的不知道我是初学者。 –

+0

嗨, 也许。您应该只绑定一次控件。所有更新将由后台事件自动触发。重新绑定是没有必要的。 要激活新的过滤器,我将在模型路径“/ First”上绑定一个将在每次更改时调用的更改侦听器。 'var binding = new sap.ui.model.json.JSONPropertyBinding(oModel,'/ First'); \t \t \t binding.attachChange(function(){'update binding in table binding});'' –

0

您可以显示代码在哪里填充模型的数据?

您需要再次执行此功能。它不必位于导航事件之前,因为数据绑定会自动更新。以下应该工作:

navToSecond : function (oEvent){ 

    var oModel = sap.ui.getCore().getModel("Filter"); 
    if (oModel){ 
    jQuery.ajax({ 
     url: "my/data/url", 
     success: function(data,status,jxXHR){ 
//this is an example with an AJAX call, but the point is loading new json data into your model 
    oModel.setData(data); 
    }, 
     type: "GET", 
     contentType: "application/json; charset=utf-8" 
     }); 
    } else { 
     oModel = new sap.ui.model.json.JSONModel(); 
     sap.ui.getCore().setModel(oModel, "Filter"); 
     oModel.setProperty("/First", this.getView().byId("inp").getValue()); 
    } 
      this.getRouter().navTo("second"); 
    } 
+0

谢谢你的回复,我新进这个。但我想当我设置属性oModel.setProperty(“/ First”,this.getView()。byId(“inp”)。getValue())时,填充模型的值。然后在第二个视图控制器的方法beforeRebindTable中调用模型和属性var myObject = sap.ui.getCore()。getModel('Filter')。getProperty('/ First');并将其放入过滤器oBindingParams.filters.push(new sap.ui.model.Filter('Status','EQ',myObject)); –

+0

它看起来像你的代码第二次生成新的URL,但我想我需要编辑这一行url:“my/data/url”,但林不知道。 –

+0

@M.Mikuš请记录“this.getView()。byId(”inp“)。getValue()”的值,并检查它是否包含您期望的信息。此外,请确保您使用“sap.ui.getCore()。”setModel(oModel,“Filter”);“第二次,或者你可能从核心中'取消'模型。您可以通过记录您的视图并检查模型/传播的属性来检查。如果您提供此信息,我可以进一步帮助 –

相关问题