在 DOM 中镜像 JSON 对象更改 jQuery(或可能与其他框架)

Mirror JSON object changes in the DOM in jQuery (or possibly with other frameworks)

我需要构建一个网络应用程序,理想情况下应该有一个包含多个属性的 json 对象,并在这些属性发生变化时更新 DOM(html 元素)。

示例:

<ul data-id="elements">
<li data-id="01">Element 01</li>
<li data-id="02">Element 02</li>
<li data-id="03">Element 03</li>
<li data-id="04">Element 04</li>
</ul>

这个 UL 会有一个镜像 JSON 对象来保存所有的值,当我在对象上做这样的事情时:

elements.id('01') = "Change Value";

它会根据更改的内容自动(或通过方法调用)更新 UL。在这种情况下,它会导致:

<ul data-id="elements">
<li data-id="01">Change Value</li>
<li data-id="02">Element 02</li>
<li data-id="03">Element 03</li>
<li data-id="04">Element 04</li>
</ul>

在完美的情况下,我会在 Jquery 中以某种方式做到这一点,但我不知道从哪里开始(我的意思是,如果不为它编写一个全新的库也是可能的)。有任何想法或可能已经构建的库吗?

我知道我可以使用 jquery 函数更改一个元素,但我的想法是让对象自动更新到视图中。

我尝试研究 Angular 和 React,但两者似乎与我已经使用的东西(纯 javascript 和 jquery)相去甚远。还没想好用什么,大家可以指点一下吗?

您还用 reactjs 标记了您的问题。因此我建议 react 这样做。

一种常见的方法是创建两个组件,ListListItemList 组件应处理状态、ajax 调用以及将列表内容作为 props 传递给子组件 ListItem

这个小 fiddle 完全可以满足您的需求。

var List = React.createClass({
    loadFromServer: function() {
        $.ajax({
            url: this.props.url,
            data: data,
            type: 'POST',
            success: function(data) {
                console.log(data);
                this.setState({data: data});
            }.bind(this),
            error: function(xhr, status, err) {
                console.error(this.props.url, status, err.toString());
            }.bind(this)
        });
    },
    getInitialState: function() {
        return {data: []};
    },
    componentDidMount: function() {
        this.loadFromServer();
    },
    handleClick: function() {
        var data = this.state.data;
        data[4].text = 'Change Value';

        this.setState({data: data});
    },
    render: function() {
        var listItems = this.state.data.map(function(item) {
            return <ListItem text={item.text} />;
        });

        return (
            <div>
                <ul>
                    {listItems}
                </ul>
                <button onClick={this.handleClick}>Change first list item</button>
            </div>
        );
    }
});

var ListItem = React.createClass({
    render: function() {
        return <li>{this.props.text}</li>;
    }
});

React.render(<List url="/echo/json/" />, document.getElementById('container'));

this tutorial 中,您将学习如何构建一个简单的 React 应用程序。