如何获取从一个JS文件到另一个js的viewModels和主js文件中的值?

时间:2017-01-27 13:02:50

标签: javascript html5 mvvm knockout.js oracle-jet

enter image description here

在login.js中,rest API会返回某些值,我必须在Dashboard.html中使用它,但我无法在dashboard.js中获取这些值。

我也希望在index.html中实现相同的目标(即)我必须从login.js获取值。

现在请在下面澄清我,

如何在viewModels中将值从一个js传递到另一个js文件? 如何将viewModel js文件中的值传递给main.js文件?

login.js

define(['ojs/ojcore', 'knockout', 'jquery', 'ojs/ojknockout',   'ojs/ojinputtext'], 

function (oj, ko, $,main)
{
 var myviewModel = function()
{
  var self = this;
 self.isLoggedIn = ko.observable(false);
 self.username = ko.observable();
 self.password = ko.observable();
  self.save = function(data, event)
{
    $.ajax({

        url: "my url",
        type: "GET",
        headers: { header parameters },

        success: function(data)
        {   
  var json =JSON.stringify($.parseJSON(data));
 // alert(json);
  var val = JSON.parse(json);

 self.ERROR_CODE= ko.observable(val.Body.processResponse.ERROR_CODE);
 self.ERROR_MSG= ko.observable(val.Body.processResponse.ERROR_MSG);
 if(self.ERROR_CODE()=='S')
 {
     self.isLoggedIn(true);
      window.location="js/views/dashboard.html";
 }
 document.getElementById('errormsg').value=val.Body.processResponse.ERROR_MSG;

        },
        error: function(jqXHR, exception)
        {
           alert("Not OK!") ;   
        }
   })
}
 }
 return new myviewModel();

});

我想传递self.isLoggedIn值。

2 个答案:

答案 0 :(得分:0)

创建一个单独的js文件,让我们说xyzState.js,它将用于保存导航或js文件之间的数据。 现在几点要记住。

  1. 不要在状态文件中使用observable属性而是使用普通变量。
  2. 在login.js文件中注入状态文件。
  3. 在您的login.vm中,为州档案变量指定值。
  4. 现在在dashboard.js文件中注入状态文件。
  5. 状态的所有属性都应该在dashboard.vm中提供。
  6. 状态文件看起来像这样。

    define('xyzstate',
        ['ko'],
        function (ko) {
            var self = {};
    
            var clear = function () {          
                self.isLoggedIn= false;
    
            self = _.extend(self, {
                isLoggedIn: false,           
            });
    
            return self;
        });
    

答案 1 :(得分:0)

这是Oracle JET中的模块间通信的概念,或者你可以说是淘汰赛。当我们说模块时它指的是一对html和js(视图和视图模型)文件。因此,当您想要从一个js访问或通信到另一个js时,这意味着您想要进行模块间通信。 Knockout提供以下功能。

ko.dataFor(的document.getElementById( 'homeContent'))

你也可以参考我认为非常有用的oracle博客。

https://blogs.oracle.com/geertjan/entry/intermodular_communication_in_oracle_jet1

她的ko.dataFor(document.getElementById('homeContent'))您需要获取要访问可观察变量的模块的元素id。假设有一个模块有图表组件,你想访问它的钻取处理程序,你可以参考上面代码中的图表元素id。