1

在此处输入图像描述

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

我也想在 index.html 中实现同样的效果(即)我必须从 login.js 中获取值。

现在请在下面澄清我,

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

登录.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 值。

4

2 回答 2

0

创建一个单独的 js 文件,假设 xyzState.js 将用于保存导航或 js 文件之间的数据。现在这里要记住几点。

  1. 不要在状态文件中使用 observable 属性,而是使用普通变量。
  2. 在 login.js 文件中注入状态文件。
  3. 在您的 login.vm 中,为状态文件变量赋值。
  4. 现在在您的 dashboard.js 文件中注入状态文件。
  5. 状态的所有属性都应该在dashboard.vm 中可用。

状态文件看起来像这样。

define('xyzstate',
    ['ko'],
    function (ko) {
        var self = {};

        var clear = function () {          
            self.isLoggedIn= false;

        self = _.extend(self, {
            isLoggedIn: false,           
        });

        return self;
    });
于 2017-01-29T00:37:57.063 回答
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。

于 2017-04-21T13:32:38.467 回答