簡體   English   中英

Javascript & knockoutjs:如何重構以下代碼以便能夠訪問 function 之外的屬性

[英]Javascript & knockoutjs: how to refactor the following code to be able to access the properties outside the function

我正在努力尋找一種方法來獲取 function 之外可用的屬性 Override & Justification。 代碼是:

 self.CasOverridesViewModel = ko.observable(self.CasOverridesViewModel);

 var hasOverrides = typeof self.CasOverridesViewModel === typeof(Function);

    if (hasOverrides) {
        self.setupOverrides = function() {
            var extendViewModel = function(obj, extend) {
                for (var property in obj) {
                    if (obj.hasOwnProperty(property)) {
                        extend(obj[property]);
                    }
                }
            };

            extendViewModel(self.CasOverridesViewModel(), function(item) {

                item.isOverrideFilledIn = ko.computed( function() {
                    var result = false;

                    if (!!item.Override()) {
                        result = true;
                    }

                    return result;
                });

                if (item) {
                    item.isJustificationMissing = ko.computed(function() {
                        var override = item.Override();
                        var result = false;
                        
                        if (!!override) {
                            result = !item.hasAtleastNineWords();
                        }

                        return result;
                    });

                    item.hasAtleastNineWords = ko.computed(function() {
                        var justification = item.Justification(),
                            moreThanNineWords = false;

                        if (justification != null) {
                            moreThanNineWords = justification.trim().split(/\s+/).length > 9;
                        } 

                        return moreThanNineWords;
                    });

                    item.isValid = ko.computed(function() {
                        return (!item.isJustificationMissing());
                    });
                }
            });
        }();
    }

我已經通過設置一個全局變量來嘗試它:

var item;
or
var obj;

if(hasOverrides) {...


因此,最讓我無法理解的是如何在底層 model CasOverridesviewModel 之間建立連接。 正如我假設 self.CasOverridesViewModel.Override() 將能夠獲取寫入屏幕上的數據。

我做的另一個嘗試是 var override = ko.observable(self.CasOverridesViewModel.Override()),這導致了 js typeError,因為您無法從未定義的 object 中讀取。

因此,如果有人能夠就如何從 function 之外的可用輸入字段中獲取字段提供一些指導。 將不勝感激。 如果我需要澄清某些方面,請不要猶豫。

致以最誠摯的謝意!

不知道你想用你的變量在 go 之外多遠,但是如果你只是在根級別定義你的全局變量,但只是在你的內部變量獲得值時才添加到它,你不會得到設置未定義的錯誤。

 var root = { override: ko.observable() }; root.override.subscribe((val) => console.log(val)); var ViewModel = function () { var self = this; self.override = ko.observable(); self.override.subscribe((val) => root.override(val)); self.load = function () { self.override(true); }; self.load(); }; ko.applyBindings(new ViewModel());
 <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM