簡體   English   中英

將值傳遞給JavaScript中的Ajax加載函數

[英]Passing values in to ajax loaded functions in javascript

我有一個將“內容塊”加載到我的頁面上的功能,我稱之為組件...

function loadComponent(container, componentName, callback) {
    api.get("Core/Component/Render()?AppId=" + session.app.Id + "&Name=" + componentName, function (result) {
            container.append(result.value);
            if (callback) { callback(result.value); }
    });
}

api.get只是執行ajax調用。

通常,當我使用此功能時,我會執行類似的操作...

var app = { ... };

loadComponent($("some selector"), "ComponentName", function(e) {
    ComponentName.init(app);
});

最近,我注意到init函數旁邊的“ app”始終未定義。 如果我在回調函數(或調試器語句)中設置了斷點,瀏覽器將跳過該斷點,並放入init並在此處停止。

如果在loadComponent調用之前放置一個斷點/調試器語句,我會看到“ app”值已正確填充並且未定義。

誰能解釋什么可能導致這種行為?

更新:

好的,所以我有這個功能,可以像這樣多次撥打電話...

expand: function (e) {
    var theApp = GetApp();

    loadComponent($(".tab[name=cultures]", container), "CultureManagement", function (c) { CultureManagement.init(theApp, $("[name=cultures]", container)); });
    loadComponent($(".tab[name=templates]", container), "TemplateManagement", function (c) { TemplateManagement.init(theApp, $("[name=templates]", container)); });
    loadComponent($(".tab[name=layouts]", container), "LayoutManagement", function (c) { LayoutManagement.init(theApp, $("[name=layouts]", container)); });
    loadComponent($(".tab[name=components]", container), "ComponentManagement", function (c) { ComponentManagement.init(theApp, $("[name=components]", container)); });
    loadComponent($(".tab[name=resources]", container), "Resourcing", function (c) { Resourcing.init(theApp, $("[name=resources]", container)); });
    loadComponent($(".tab[name=packaging]", container), "PackageManagement", function (c) { PackageManagement.init(theApp, $("[name=PackageManagement]", container)); });
    loadComponent($(".tab[name=roles]", container), "UserManagement", function (c) { UserManagement.init(theApp, $("[name=roles]", container)); });

扼殺,對於init調用第一行中的某些“ theApp”是未定義的,而對於其他則不是。 多么奇怪的情況。

所以事實證明,調用不是來自我的加載塊,而是來自執行此操作的組件代碼本身。

$(function() { 
      var me = document.currentScript;
      if($(me).closest("[name=grid]").length === 0) { PackageManagement.init(); } 
});

...這應該僅在組件沒有將其加載到其中的父網格組件時才在組件上調用init。

顯然我需要重新考慮這種邏輯。

暫無
暫無

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

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