【问题标题】:How to obtain the value present from one JS file to another js of viewModels and in main js file?如何获取从一个 JS 文件到 viewModels 的另一个 js 和主 js 文件中存在的值?
【发布时间】:2017-06-13 04:08:29
【问题描述】:

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

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

现在请在下面澄清一下,

如何将值从一个 js 传递到 viewModels 中的另一个 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 值。

【问题讨论】:

  • 你试过什么?这应该与在任何面向对象语言中的工作方式相同。您从创建它的主函数中读取了登录实例的属性。

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


【解决方案1】:

创建一个单独的 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;
    });

【讨论】:

    【解决方案2】:

    这就是 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。

    【讨论】:

      猜你喜欢
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 2018-07-23
      相关资源
      最近更新 更多