minim中文文档|minim js中文教程|解析

npm npmdoc 2年前 (2022-01-01) 506次浏览

minim中文文档|minim js中文教程|解析

安装命令:npm i minim

最小

用于与Refract 元素交互的库

安装

$ npm install minim

关于

在使用基于 XML 的 DOM 时,文档中可用的类型存在限制。元素属性只能是字符串,元素值只能是字符串、混合类型和嵌套元素。

JSON 提供了其他类型,包括对象、数组、布尔值和空值。但是,纯 JSON 文档不为文档中的每个属性和值提供结构和属性。

Refract 是 JSON 文档的 JSON 结构,用于制作更灵活的文档对象模型。在 Refract 中,每个元素都包含三个组件:

  1. 元素名称
  2. 元数据
  3. 属性
  4. 内容(根据元素可以是不同的元素)

一个元素最终看起来像这样:

const element = {
  element: 'string',
  content: 'bar'
};

用法

将 JavaScript 值转换为元素

var minim = require('minim').namespace();
var arrayElement = minim.toElement([1, 2, 3]);
var refract = minim.toRefract(arrayElement);

refract上面变量具有以下 JSON 值。

{
  "element": "array",
  "content": [
    {
      "element": "number",
      "content": 1
    },
    {
      "element": "number",
      "content": 2
    },
    {
      "element": "number",
      "content": 3
    }
  ]
}

将序列化折射转换为元素

Serialized Refract 可以转换回 Minim 元素以进行往返。

var arrayElement1 = minim.toElement([1, 2, 3]);
var refracted = minim.toRefract(arrayElement1);
var arrayElement2 = minim.fromRefract(refracted);

请注意,由于可选的折射 in meta,任何看起来像给定序列化中的元素的东西都将被加载。

扩展元素

您可以使用extend静态方法扩展元素

var StringElement = minim.getElementClass('string');
var NewElement = StringElement.extend({
  constructor: function() {
    this.__super();
  },
 
  customMethod: function() {
    // custom code here
  }
})

元素属性

每个 Minim 元素提供以下属性:

  • element (string) – 元素的名称
  • meta (object) – 元素的元数据
  • attributes (object) – 元素的属性
  • content – 元素的内容,例如其他元素的列表。

此外,在元素上公开了便利属性:

  • id (StringElement) – 的快捷方式.meta.get('id')
  • name (StringElement) – 的快捷方式.meta.get('name')
  • 类 (ArrayElement) – 的快捷方式.meta.get('classes')
  • title (StringElement) – 的快捷方式.meta.get('title')
  • description (StringElement) – 的快捷方式.meta.get('description')

元素方法

每个 Minim 元素提供以下方法。

价值

toValue方法返回 Minim 元素的 JSON 值。

var arrayElement = minim.toElement([1, 2, 3]);
var arrayValue = arrayElement.toValue(); // [1, 2, 3]

参考

toRef方法返回一个引用该元素的 RefElement。

var ref = element.toRef();

toRef 接受可选路径。

var ref = element.toRef('attributes');

等于

允许测试与元素内容的相等性。

var stringElement = minim.toElement("foobar");
stringElement.equals('abcd'); // returns false

克隆

创建给定实例的克隆。

var stringElement = minim.toElement("foobar");
var stringElementClone = stringElement.clone();

递归查找

递归查找元素。返回包含与给定元素名称匹配的所有元素的 ArrayElement。

const strings = element.findRecursive('string');

您可以将多个元素名称传递给findRecursive. 当传递多个元素名称时,minim 只会找到在其他给定元素中找到的元素。例如,我们可以传入memberandstring以便递归查找string在一个member元素中找到的所有元素

const stringInsideMembers = element.findRecursive('member', 'string');

孩子们

children属性返回ArrayElement包含所有直接子元素的 。

var arrayElement = minim.toElement(['a', [1, 2], 'b', 3]);
var numbers = arrayElement.children(function(el) {
  return el.element === 'number';
}).toValue(); // [3]

递归儿童

recursiveChildren属性以ArrayElement递归方式返回包含所有子元素的 。

var arrayElement = minim.toElement(['a', [1, 2], 'b', 3]);
var children = arrayElement.recursiveChildren;
children.toValue(); // ['a', 1, 2, 'b', 3]
链接
var evenNumbers = array
  .recursiveChildren
  .findByElement('number')
  .filter((element) => element.toValue() % 2)

最小元素

Minim 支持以下基本元素

空元素

这是用于表示null的元素

字符串元素

这是用于表示字符串值的元素。

set方法设置StringElement实例的值

var stringElement = minim.toElement('');
stringElement.set('foobar');
var value = stringElement.toValue() // toValue() returns 'foobar'

数字元素

这是用于表示数值的元素。

set方法设置NumberElement实例的值

var numberElement = minim.toElement(0);
numberElement.set(4);
var value = numberElement.toValue() // toValue() returns 4

布尔元素

这是用于表示布尔值的元素。

set方法设置BooleanElement实例的值

var booleanElement = minim.toElement(false);
booleanElement.set(true);
var value = booleanElement.toValue() // toValue() returns true

数组元素

这是用于表示数组的元素。

迭代

如果环境支持迭代协议,则数组元素是可迭代的然后,您可以在for ... of循环中使用该元素,使用展开运算符yield*、 和解构赋值。

const arrayElement = minim.toElement(['a', 'b', 'c']);
 
for (let item of arrayElement) {
  console.log(item);
}
得到

get方法返回ArrayElement给定索引处的实例

var arrayElement = minim.toElement(['a', 'b', 'c']);
var value = arrayElement.get(0) // get(0) returns item for 'a'
获取值

getValue方法返回ArrayElement给定索引处的实例项的值

var arrayElement = minim.toElement(['a', 'b', 'c']);
var value = arrayElement.getValue(0) // get(0) returns 'a'
获取索引

getIndex方法返回给定索引处的数组项。

var arrayElement = minim.toElement(['a', 'b', 'c']);
var value = arrayElement.getIndex(0) // returns the item for 'a'

set方法设置ArrayElement实例的值

var arrayElement = minim.toElement([]);
arrayElement.set(0, 'z');
var value = arrayElement.get(0) // get(0) returns 'z'
消除

remove方法从ArrayElement实例中删除一个项目(由索引指定)

var arrayElement = minim.toElement(['a', 'b', 'c']);
arrayElement.remove(0);
var value = arrayElement.get(0) // returns 'b'
地图

map方法可用于映射数组。给定的每个项目都是一个 Minim 实例。

var arrayElement =minim.toElement(['a', 'b', 'c']);
var newArray = arrayElement.map(function(item) {
  return item.element;
}); // newArray is now ['string', 'string', 'string']
筛选

filter方法可用于过滤 Minim 数组。此方法返回一个 Minim 数组本身,而不是一个 JavaScript 数组实例。

var arrayElement = minim.toElement(['a', 'b', 'c']);
var newArray = arrayElement.filter(function(item) {
  return item.toValue() === 'a'
}); // newArray.toValue() is now ['a']
减少

reduce方法可用于减少 Minim 数组或对象。该方法接受一个函数和一个可选的起始值。

var numbers = minim.toElement([1, 2, 3, 4]);
var total = numbers.reduce(function(result, item) {
  return result.toValue() + item.toValue();
}); // total.toValue() === 10

reduce方法还接受一个初始值,它可以是一个值或 Minim 元素。

var numbers = minim.toElement([1, 2, 3, 4]);
var total = numbers.reduce(function(result, item) {
  return result.toValue() + item.toValue();
}, 10); // total.toValue() === 20

reduce方法也适用于对象:

var objNumbers = minim.toElement({a: 1, b:2, c:3, d:4});
var total = objNumbers.reduce(function(result, item) {
  return result.toValue() + item.toValue();
}, 10); // total.toValue() === 20

传递给的函数reduce最多可以接受五个可选参数,具体取决于您使用的是数组元素还是对象元素:

大批

  1. result: 到目前为止的减少值
  2. item: 数组中的当前项
  3. index: 数组中当前项的从零开始的索引
  4. arrayElement:包含item(例如numbers上面)的数组元素

目的

  1. result: 到目前为止的减少值
  2. item: 对象中当前项的值元素
  3. key: 对象中当前项的关键元素
  4. memberElement: 包含key的成员元素value
  5. objectElement:包含memberElement(例如objNumbers上面)的对象元素
为每个

forEach方法可用于迭代 Minim 数组。

var arrayElement = minim.toElement(['a', 'b', 'c']);
arrayElement.forEach(function(item) {
  console.log(item.toValue())
}); // logs each value to console
转移

shift方法可用于从 Minim 数组的开头删除项目。

var arrayElement = minim.toElement(['a', 'b', 'c']);
var element = arrayElement.shift();
console.log(element.toValue()); // a
不移位

unshift方法可用于将项目插入到 Minim 数组的开头。

var arrayElement = minim.toElement(['a', 'b', 'c']);
arrayElement.unshift('d');
console.log(arrayElement.toValue()); // ['d', 'a', 'b', 'c']

push方法可用于将项目添加到 Minim 数组。

var arrayElement = minim.toElement(['a', 'b', 'c']);
arrayElement.push('d');
console.log(arrayElement.toValue()); // ['a', 'b', 'c', 'd']
寻找

find方法遍历整个后代元素树并返回ArrayElement与给定条件函数匹配的所有元素的一个

var arrayElement = minim.toElement(['a', [1, 2], 'b', 3]);
var numbers = arrayElement.find(function(el) {
  return el.element === 'number'
}).toValue(); // [1, 2, 3]
按类查找

findByClass方法遍历整个后代元素树并返回ArrayElement与给定类匹配的所有元素的一个。

按元素查找

findByElement方法遍历整个后代元素树并返回ArrayElement与给定元素名称匹配的所有元素的一个

getById

搜索整个树以找到匹配的 ID。

elTree.getById('some-id');
包括

测试以查看集合是否包含给定的值。进行深入的平等检查。

var arrayElement = minim.toElement(['a', [1, 2], 'b', 3]);
arrayElement.includes('a'); // returns true
长度

返回数组元素中的项数。

arrayElement.length;
是空的

返回数组元素是否为空。

if (arrayElement.isEmpty) {
  console.log("We have an empty array");
}
第一的

返回集合中的第一个元素。

var arrayElement = minim.toElement(['a', [1, 2], 'b', 3]);
arrayElement.first; // returns the element for "a"
第二

返回集合中的第二个元素。

var arrayElement = minim.toElement(['a', [1, 2], 'b', 3]);
arrayElement.second; // returns the element for "[1, 2]"
最后的

返回集合中的最后一个元素。

var arrayElement = minim.toElement(['a', [1, 2], 'b', 3]);
arrayElement.last; // returns the element for "3"

对象元素

这是用于表示对象的元素。对象将它们的项存储为有序数组,因此它们从ArrayElement.

得到

get方法返回ObjectElement给定名称实例。查看getKeygetMember了解围绕键值对获取更多实例的方法。

var objectElement = minim.toElement({ foo: 'bar' });
var value = objectElement.get('foo') // returns string instance for 'bar'
获取值

getValue方法返回ObjectElement给定名称实例的值

var objectElement = minim.toElement({ foo: 'bar' });
var value = objectElement.getValue('foo') // returns 'bar'
获取密钥

getKey方法返回键值对的键元素。

var objectElement = minim.toElement({ foo: 'bar' });
var key = objectElement.getKey('foo') // returns the key element instance
获取会员

getMember方法返回键值对的整个成员。

var objectElement = minim.toElement({ foo: 'bar' });
var member = objectElement.getMember('foo') // returns the member element
var key = member.key; // returns what getKey('foo') returns
var value = member.value; // returns what get('foo') returns

set方法设置ObjectElement实例的值

var objectElement = minim.toElement({});
objectElement.set('foo', 'hello world');
var value = objectElement.get('foo') // get('foo') returns 'hello world'
钥匙

keys方法返回一个键数组。

var objectElement = minim.toElement({ foo: 'bar' });
var keys = objectElement.keys() // ['foo']
消除

remove方法从ObjectElement实例中删除一个键

var objectElement = minim.toElement({ foo: 'bar' });
objectElement.remove('foo');
var keys = objectElement.keys() // []

因此,您可以使用 elementa.meta.remove() 或 element.attributes.remove() 。

价值观

values方法返回一个键数组。

var objectElement = minim.toElement({ foo: 'bar' });
var values = objectElement.values() // ['bar']
项目

items方法返回一个键值对数组,可以使迭代更简单。

const objectElement = minim.toElement({ foo: 'bar' });
 
for (let [key, value] of objectElement.items()) {
  console.log(key, value); // foo, bar
}
映射、过滤、减少和 forEach

mapfilterforEach方法的工作类似于ArrayElement地图功能,但回调接收值,键和构件元素实例。reduce方法接收减少的值、值、键、成员和对象元素实例。

请参阅getMember以了解有关如何与成员元素交互的更多信息。

const objectElement = minim.toElement({ foo: 'bar' });
const values = objectElement.map((value, key, member) => {
  // key is an instance for foo
  // value is an instance for bar
  // member is an instance for the member element
  return [key.toValue(), value.toValue()]; // ['foo', 'bar']
});

命名空间

命名空间方法

toRefract

toRefract方法返回 Minim 元素的 Refract 值。

请注意,如果 中的任何元素meta定义了将通过调用丢失的元数据或属性,toValue()则该元素也将转换为折射。

var arrayElement = namespace.toElement([1, 2, 3]);
var refract = namespace.toRefract();

自定义命名空间

Minim 允许您注册自定义元素。例如,如果您要处理的元素名称被调用,category并且它应该像数组一样处理:

var minim = require('minim').namespace();
var ArrayElement = minim.getElementClass('array');
 
// Register your custom element
minim.register('category', ArrayElement);
 
// Load serialized refract elements that includes the new element
var elements = minim.fromRefract({
  element: 'category',
  meta: {},
  attributes: {},
  content: [
    {
      element: 'string',
      meta: {},
      attributes: {},
      content: 'hello, world'
    }
  ]
});
 
console.log(elements.get(0).content); // hello, world
 
// Unregister your custom element
minim.unregister('category');

创建命名空间插件

也可以创建插件模块来定义自定义命名空间的元素。插件模块应该导出一个namespace函数,该函数接受一个options对象,对象包含一个可以添加元素的现有命名空间:

var minim = require('minim').namespace();
 
// Define your plugin module (normally done in a separate file)
var plugin = {
  namespace: function(options) {
    var base = options.base;
    var ArrayElement = base.getElementClass('array');
 
    base.register('category', ArrayElement);
 
    return base;
  }
}
 
// Load the plugin
minim.use(plugin);

load属性可以在除了使用namespace属性时,插件不执行命名空间。

var minim = require('minim').namespace();
 
// Define your plugin module (normally done in a separate file)
var plugin = {
  load: function(options) {
    // Plugin code here
    return base;
  }
}
 
// Load the plugin
minim.use(plugin);

链接

使用 getter 和 setter 时也可以链接方法。

var objectElement = minim.toElement({})
  .set('name', 'John Doe')
  .set('email', 'john@example.com')
  .set('id', 4)
项目贡献人员列表:


极客公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:minim中文文档|minim js中文教程|解析
喜欢 (0)
.excerpt .focus {display:none}