2sxc: заполнить выпадающие значения строки из кода / API

В приложении модуля 2sxc я хочу получить значения для "String Drop Down Values" из функции или внешнего веб-API, а не с введенным списком значений.

Это возможно по умолчанию или кто-то может дать мне несколько советов, с чего начать?

(РЕДАКТИРОВАТЬ / ДОБАВИТЬ) Является ли создание контента пользовательским типом ввода единственным способом, или есть какой-то более простой способ?

3 ответа

Решение

Так что в основном ваш код работает внутри Angular, который также имеет загруженный 2sxc4ng. Есть как минимум 3 способа решить вашу проблему.

  1. Вы можете использовать объект sxc, который совпадает с $2sxc(moduleId)
  2. Вы можете использовать IID
  3. вы можете просто использовать $http, так как он уже предварительно загружен с идентификатором модуля в заголовках

Использование $ 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)

Это должно сделать это.

Создание пользовательского типа ввода является единственным способом на данный момент. Так как многие люди ищут что-то подобное, было бы здорово, если бы вы тогда спонсировали / делали это:)

Я приложил пример приложения с небольшим описанием.

скачать

Все вещи уже описаны хорошо по этой ссылке: 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 я использую это: http://www.mocky.io/v2/57aae03e120000be10739d3b созданный на www.mocky.io, и это jsonUrl по умолчанию для "string-nn-json-list". Вы можете изменить этот URL в настройках поля.


EDIT (1)

Я пытаюсь получить moduleId с помощью IID в контроллер, но безуспешно..

(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 был доступен?


EDIT (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, чтобы получить что-то частично полезное...

Другие вопросы по тегам