2sxc:从 code/api 中填充字符串下拉值

2sxc : Fill String Dropdown Values from code/api

2sxc 模块应用程序中,我想从函数或外部网络 api 中获取 "String Drop Down Values" 的值,而不是使用输入的值列表。

这在默认情况下是否可行,或者有人可以给我一些指导,从哪里开始执行此操作?

(EDIT/ADD) 使 Content Custom Input Type 是唯一的方法,还是有一些更简单的方法?

创建自定义输入类型是目前唯一的方法。由于很多人都在寻找这样的东西,如果你能 sponsor/contribute 就太好了 :)

我附上了带有少量描述的示例应用程序。

download

所有的东西都已经描述好了 link: http://2sxc.org/en/blog/post/configurable-custom-input-type-dynamic-data-content

我只是将此示例更改为使用字符串,主要代码更改在 angular 控制器中,我的代码如下所示:

        var url;
        var controlSettings = $scope.to.settings["string-nn-json-list"];
        if (controlSettings)  url = controlSettings.jsonUrl || null;
        // if null set default apiUrl
        if (url === null)     url = "http://www.mocky.io/v2/57aae03e120000be10739d3b";
        $http({
            method: 'GET',
            url: url,
            headers: {
                'TabId': undefined,
                'Pragma' : undefined,
                'RequestVerificationToken' : undefined,
                'Cache-Control' : undefined,
                'Debugging-Hint' : undefined,
                'ContentBlockId' : undefined,
                'ModuleId' : undefined,
            }
        }).then(function successCallback(response) {
            $scope.json_list_data = response.data;
        });

对于外部 json api 数据,我使用这个:http://www.mocky.io/v2/57aae03e120000be10739d3b 在 www.mocky.io 上创建,这是默认的 jsonUrl "string-nn-json-list"。您可以在字段设置中更改此 url。


编辑(1)

我试图在 iid 的帮助下将 moduleId 获取到控制器中,但没有成功..

(function() {
    "use strict";
    angular.module("nnStringFromIntJsonData", [])
        .config(function(formlyConfigProvider, defaultFieldWrappers) {
        })
        .controller("FieldTemplate-String-Nn-Int-Json-List", function($scope, $filter, $modal, appId, debugState, eavAdminDialogs, $http) {
            // What to change in this code
            // that I can get iid (moduleId) in this part of code?
            debugger;
        })
        .run(
            function($templateCache) {
            })
})();

我必须更改(添加)到此代码才能访问 iid 的内容?


编辑(2)

一种方法但失去了安全性(我只用于读取不重要的数据)是你删除 Api 控制器属性的方法:

[DnnModuleAuthorize] 和 [ValidateAntiForgeryToken] 并仅保留 [HttpGet]

并且当从自定义输入类型控制器调用时使用类似的东西:

var url = "/DesktopModules/2sxc/API/app-api/{ControllerName}/{MethodName}";
$http.get(url).then(function successCallback(response) {
    $scope.json_list_data = response.data;
});

我真的不知道我在做什么...似乎我知道的越多我知道的越少 :-( 并使用 try/error 系统进行编码以获得部分可用的东西...

所以基本上你的代码是 运行 在 Angular 里面,它也加载了 2sxc4ng。至少有 3 种方法可以解决您的问题。

  1. 你可以使用 sxc object,它与 $2sxc(moduleId)
  2. 相同
  3. 你可以使用 iid
  4. 您可以只使用 $http,因为它已经 pre-loaded 和 headers
  5. 中的 module-id

使用 $http 非常清楚 - 如果您观察连线,您会发现 moduleid 已经包含在 headers 中。

要访问 iid 或 sxc object,您需要将它们作为依赖项放在这一行中 .controller("FieldTemplate-String-Nn-Int-Json-List", function($scope, $filter, $modal, appId, debugState, eavAdminDialogs, $http) 所以你需要 .controller("FieldTemplate-String-Nn-Int-Json-List", function($scope, $filter, $modal, appId, debugState, eavAdminDialogs, $http, iid, sxc)

应该可以了。