2sxc:从代码/ api填充字符串下拉列表值

时间:2016-08-03 05:38:31

标签: dotnetnuke-module 2sxc

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

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

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

3 个答案:

答案 0 :(得分:1)

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

  1. 你可以使用sxc对象,它与$ 2sxc(moduleId)相同
  2. 你可以使用iid
  3. 你可以使用$ http,因为它已经预先加载了标题中的module-id
  4. 使用$ http非常清楚 - 如果你看电线,你会发现moduleid已经包含在标题中了。

    要访问iid或sxc对象,您需要将它们作为依赖项放在此行中 .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)

    应该这样做。

答案 1 :(得分:0)

创建自定义输入类型是目前唯一的方法。由于很多人都在寻找这样的东西,如果你赞助/贡献它会很棒:)

答案 2 :(得分:0)

我附上了几乎没有描述的示例应用程序。

download

此链接上已经描述了所有内容:http://2sxc.org/en/blog/post/configurable-custom-input-type-dynamic-data-content

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

        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数据,我使用:在www.mocky.io上创建的http://www.mocky.io/v2/57aae03e120000be10739d3b,这是" string-nn-json-list"的默认jsonUrl。您可以在字段设置中更改此网址。

修改(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系统编写部分可用的代码......