2015-10-09 2 views
0

Мой вопрос несколько схож с ответом на неотвеченный вопрос. (Не уверен, хотя) Sitecore 8 SPEAK: Getting an Error When calling a Method in JS FileSitecore 8 SPEAK - Вызов пользовательских компонентов Метод Javascript

Я использую Sitecore8

На моей странице есть кнопка и на его событие нажатия я хочу вызвать добавить() заказной источник данных компоненты.

Планировка:

Layout looks like this

JS код страницы:

define(["sitecore"], function (Sitecore) { 
    var JsonListPage = Sitecore.Definitions.App.extend({ 
    initialized: function() { 
     alert('Inside Json PageList Init'); 

    }, 
    loadData: function() { 
     alert('Button clicked'); 
     app.add(); 
    } 
    }); 

    return JsonListPage; 
}); 

JS код для компонента пользовательского источника данных:

define(["sitecore"], function (Sitecore) { 
    var model = Sitecore.Definitions.Models.ControlModel.extend({ 
     initialize: function (options) { 
     this._super(); 
     this.set("json", null); 
     alert('Inside Jsondatasource Init'); 
    }, 
    add: function (data) { 

     var json = this.get("json"); 
     if (json === null) 
      json = new Array(); 

     // this is done because array.push changes the array to an object which then do no work on the SPEAK listcontrol. 
     var newArray = new Array(json.length + 1); 
     for (var i = json.length - 1; i >= 0; i--) 
      newArray[i + 1] = json[i]; 
     newArray[0] = data; 
     this.set("json", newArray); 
    } 
}); 

var view = Sitecore.Definitions.Views.ControlView.extend({ 
    initialize: function (options) { 
     this._super(); 
     this.model.set("json", null); 
    } 
}); 

Sitecore.Factories.createComponent("JsonDatasource", model, view, ".x-sitecore-jsondatasource"); 

}); 

.cshtml для пользовательского компонента:

@using Sitecore.Mvc 
@using Sitecore.Mvc.Presentation 
@using Sitecore.Web.UI.Controls.Common.UserControls 
@model RenderingModel 
@{ 
    var userControl =  Html.Sitecore().Controls().GetUserControl(Model.Rendering); 
    userControl.Requires.Script("client", "JsonDatasource.js"); 
    userControl.Class = "x-sitecore-jsondatasource"; 
    userControl.Attributes["type"] = "text/x-sitecore-jsondatasource"; 
    userControl.DataBind = "Json: json"; 

    var htmlAttributes = userControl.HtmlAttributes; 
}  
<div @htmlAttributes> 
    am here again 
</div> 

При загрузке страницы:

  • Это показывает предупреждение из пользовательских компонентов Init
  • Затем показывает предупреждение от Init хозяина страницы
  • На кнопку мыши он показывает предупреждение и после этого дает ошибку " приложение".

Есть немного, чего мне не хватает .. любая помощь будет оценена .. Пожалуйста, дайте мне знать, если вам нужны входы больше.

Заранее благодарен!

ответ

1

приложение доступно только в режиме отладки, поэтому id избегает использования этого, вместо этого используйте «это».

Из вашего примера кода кажется, что вы вызываете app.Add(), на странице с кодом не добавляется функция Add, это то, что делает ваш код. Вместо этого вам нужно получить доступ к методу добавления компонентов.

Вместо события доступа в пределах компоненты вы хотите вызвать функцию:

this.ComponentID.Add();

У меня есть пример пользовательского компонента SPEAK, на котором вы можете ссылаться на то, как создать компонент. https://github.com/sobek1985/MikeRobbinsSPEAKRichTextEditor

Из кода кажется ваш создания JSON источника данных, есть пример Андерс здесь http://laubplusco.net/creating-simple-sitecore-speak-json-datasource/

+0

Большое спасибо! Я уже пишу приложение, просматривая вторую ссылку, которую вы предоставили. По какой-то причине изменения, внесенные в Javascript, не отражаются, если я не очистил кеш браузера. Есть идеи об этом? Или я должен задать другой вопрос? –

+0

Да, это ожидалось, Sitecore очень хорошо кэширует JavaScript. – Komainu85

Смежные вопросы