要存储我的网页内容,我会根据语言的数量使用多个textareas。这些textareas的id /名称是content_nl,content_fr,content_en,...取决于我们使用的语言数量(表格是动态生成的)。我在每个textarea上使用ckeditor。
要存储值,我将vue.js与json一起使用。这些值存储在页面对象中。
this.$http.put('/api/pages/' + this.pageId, this.page, function (response) {}
this.page中的内容值是textarea的值,而不是编辑器的值。所以我需要使用getData()函数,然后替换this.page对象中每种语言的内容值(我不知道这是否是一个可靠的解决方案)。
所以在我使用它之前:
if(CKEDITOR.instances.content_nl)
this.page.translations['nl'].content = CKEDITOR.instances.content_nl.getData();
if(CKEDITOR.instances.content_en)
this.page.translations['en'].content = CKEDITOR.instances.content_en.getData();
...(每种语言都相同)
但我希望它可以使用任何语言更加可重用,所以我使用一个函数来生成一个包含页面上所有语言的数组:
function getEditorLanguages()
{
var collection = [];
$('textarea.editor').each(function(){
var data = this.id;
var arr = data.split('_');
collection.push(arr[1]);
});
return collection;
}
然后我尝试用getData()值替换this.page。[language] .content:
var collection = getEditorLanguages();
var self = this;
$.each(collection, function(index, value) {
var field = 'content_nl' + value;
if(CKEDITOR.instances.field)
self.page.translations[value].content = CKEDITOR.instances.field.getData();
})
进入循环时,我在this.page对象上丢失了范围:
TypeError: this.page is undefined
如何在循环中使用该页面对象?
答案 0 :(得分:1)
this
是与当前上下文相关的特定关键字。在你的循环中,当前上下文是collection
元素,而不是你想要的。
在使用之前,您必须将正确的this
对象存储到变量中。
var collection = getEditorLanguages();
var self = this;
$.each(collection, function(index, value) {
if(CKEDITOR.instances.content_+value)
self.page.translations[value].content = CKEDITOR.instances.content_+value.getData();
})