Code Monkey home page Code Monkey logo

Comments (6)

fefit avatar fefit commented on August 15, 2024 1

@xmh0511 的确 cloned() 方法是调用的 node 节点的 clone_node 方法 ,该方法只是 Rc 的一个拷贝,这个实现的确和标准语义不相符。当前库里还没有实现类似 jquery 内的 clone 方法,我打算这两天抽时间来实现一下,同时为了保证不是破坏性更改,先暂时在原基础上新增一个新方法了。

from visdom.

xmh0511 avatar xmh0511 commented on August 15, 2024
use visdom::{types::BoxDynError, Vis};

fn main()->Result<(),BoxDynError> {
    const HTML:&str = r#"<div id="contain"><p class="item"></p></div>"#;
	let v = Vis::load(HTML)?;
	let p = v.find("p").get(0).unwrap().cloned();
	let mut p_clone = Vis::dom(&p);
	p_clone.set_text("abc");
	//v.find("#contain").append(& mut p_clone);
	println!("{}",v.outer_html());
	Ok(())
}

输出:

<div id="contain"><p class="item">abc</p></div>.

期望行为:

提供deep clone方法对拷贝的对象的dom的操作不影响拷贝源dom.

from visdom.

xmh0511 avatar xmh0511 commented on August 15, 2024

也许叫 clone_dom()?既能与Rust的clone区分,也能体现jquery中clone的含义?

from visdom.

fefit avatar fefit commented on August 15, 2024

命名实在有点头大,想的是以后如果更新大版本直接把当前版本node节点的 clone_node 的语义改了,对应取了个 copy_node 可能会更好理解点~?对集合的操作还是实现了 clone 方法(可能容易和已有的 cloned 混淆,但将来更新版本可以不用改动),集合或者元素的 cloned 方法到时也会移除掉,另外对应元素上新增了一个 copied 方法,和node节点的 copy_node 对应,因为是打补丁的方式,所以好像都不太美观。新的代码我已经合并到主分支了,一会发布一个版本你可以试试:

const HTML:&str = r#"<div id="contain"><p class="item"></p></div>"#;
let v = Vis::load(HTML)?;
let p = v.find("p");
let mut p_clone = p.clone();
p_clone.set_text("abc");
assert_eq!(p.text(), "");
assert_eq!(p_clone.text(), "abc");
Ok(())

感谢建议与反馈~!

from visdom.

xmh0511 avatar xmh0511 commented on August 15, 2024

@fefit 我认为visdom里面所有类型提供的clone接口应该都是深拷贝语义(即节点/dom的深拷贝),这一点也是Rust中clone的语义,即clone返回的值具有该值类型所表示对象的独立的所有权。如果用户想要浅拷贝,应该使用获取引用,或者通过具有指针语义的类型包装节点/dom, 比如通过Rc::new(v),Arc::new(v)等表示有多个实体共享同一个节点/dom的所有权的方式,这样也即贴合Jquery clone的语义,也符合Rust的clone语义。

from visdom.

fefit avatar fefit commented on August 15, 2024

@fefit 我认为visdom里面所有类型提供的clone接口应该都是深拷贝语义(即节点/dom的深拷贝),这一点也是Rust中clone的语义,即clone返回的值具有该值类型所表示对象的独立的所有权。如果用户想要浅拷贝,应该使用获取引用,或者通过具有指针语义的类型包装节点/dom, 比如通过Rc::new(v),Arc::new(v)等表示有多个实体共享同一个节点/dom的所有权的方式,这样也即贴合Jquery clone的语义,也符合Rust的clone语义。

嗯,后续如果做大版本迭代会保持这种方式了~

from visdom.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.